19.删除链表的倒数第N个节点
给你一个链表,删除链表的倒数第 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即可求出需要删除的节点的前驱节点。现在换一种思维用两个指针指向头结点,一个指针先移动n次,然后两个指针再一起移动直到先前的节点到尾节点为止。这也代表着指针移动了length-n次。
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n){
ListNode header=new ListNode(0);
header.next=head;
ListNode start=header;
ListNode end=header;
while(n!=0){
start=start.next;
n--;
}
while(start.next!=null){
start=start.next;
end=end.next;
}
end.next=end.next.next;
return header.next;
}
}