栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode刷题——删除链表的倒数第N个结点(Java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode刷题——删除链表的倒数第N个结点(Java)

1.题目

2.条件与思路 3.解题过程

第一次提交

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head.next==null) return null;//只有一个节点的链表的特殊处理
        //关键是遍历到待删节点的前驱节点
        ListNode p = new ListNode();
        ListNode q = new ListNode();
        p=head;q=head;
        if(n<1) return null;

        //先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点
        int i = 0;
        while(i 


分析:没有考虑到删除第一个节点的特殊处理情况。

第二次提交

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head.next==null) return null;//只有一个节点的链表的特殊处理
        //关键是遍历到待删节点的前驱节点
        ListNode p = new ListNode();
        ListNode q = new ListNode();
        p=head;q=head;

        //先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点
        int i = 0;
        while(i 

4.官方题解

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head);
        ListNode first = head;
        ListNode second = dummy;
        for (int i = 0; i < n; ++i) {
            first = first.next;
        }
        while (first != null) {
            first = first.next;
            second = second.next;
        }
        second.next = second.next.next;
        ListNode ans = dummy.next;
        return ans;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号