目录
题目描述
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
输入: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)