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

目录

题目描述

思路

题解


题目描述

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

示例 1:

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

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:

输入:head = [1], n = 1
输出:[]
示例 3:

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

思路

双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。

思路是这样的,但要注意一些细节。

题解

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null){
            return null;
        }
        ListNode dum=new ListNode(0);
        dum.next=head;
        ListNode pre=dum;
        ListNode cur=dum;
        for(int i=0;i<n;i++){
            pre=pre.next;
        }
        while(pre.next!=null){
            cur=cur.next;
            pre=pre.next;
        }
        cur.next=cur.next.next;
        return dum.next;
    }
}

O(N)

O(1)

上一篇:微积分(A)随缘一题[19]


下一篇:C#19泛型