leetcode 19. 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?
image
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

使用的是双指针和链表


public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode pre= new ListNode();
        pre.next=head;
        ListNode start,end;
        start=pre;
        end=pre;
        for(int i=0;i<n;i++)
        {
            start=start.next;
        }
        while (start.next!=null)
        {
            start=start.next;
            end=end.next;
        }
        end.next=end.next.next;
        return pre.next;
    }

下面有个错误的演示,为什么会错?因为当只有一个数值,要删除这个数值的时候end.next.next是空值,所以要像上面一样构造一个前置结点消除这个错误

 public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null)return null;
        ListNode start,end,pre = null;
        start=head;
        pre=head;
        for(int i=0;i<n;i++)
        {
            start=start.next;
        }
        end=head;
        while (start!=null)
        {
            start=start.next;
            pre=end;
            end=end.next;
        }
        pre.next=pre.next.next;
        return head;
    }
posted @ 2021-08-03 20:23  LiangLiangAA  阅读(21)  评论(0编辑  收藏  举报
theme: { name: 'geek', avatar: '', headerBackground: '' // ... },