解题思路
使用双指针的思想,通过快指针来使得慢指针指向倒数第n-1个节点
(即倒数n-1个节点到节点为空的距离为n+1,当快指针指向空后,慢指针正好指向倒数第n-1个节点。)
定义快指针fast,慢指针slow,链表中删除第n个节点的前提是要找第n+1个节点
首先让快指针fast先到第n+1个节点,然后fast指针和slow指针一起走,知道fast指针指向空。
此时slow指针指向了倒数第n个节点的前一个节点,执行删除操作。
让slow指针的下一个节点指向slow指针的下一个节点的下一个节点来删除倒数第n个节点。
代码实现:
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(-1, head);
ListNode slow=dummy;
ListNode fast=dummy;
for(int i=0;i<n+1;i++)
{
fast=fast.next;
}
while(fast!=null)
{
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return dummy.next;
}