题目链接:LeetCode 19. 删除链表的倒数第 N 个结点
本题依旧采用双指针的解法,
首先快指针先走 n+1 步,然后快慢指针同时往后走。当快指针走到链表末尾时,慢指针所在的位置刚好是倒数第n-1个结点,
然后利用慢指针,删除倒数第n个结点
完整代码如下:
func removeNthFromEnd(head *ListNode, n int) *ListNode {
// 双指针法
// 快指针先走 n+1 步,然后快慢指针同时往后走。当快指针走到链表末尾时,慢指针所在的位置刚好是倒数第n-1个结点,
// 此时删除第n个结点
dumpy:=&ListNode{}
dumpy.Next = head
fast:=dumpy
slow:=dumpy
for n+1 > 0 && fast != nil {
n--
fast = fast.Next //快指针向前走n+1步
}
for fast != nil { //快慢指针同时向前走
slow = slow.Next
fast = fast.Next
}
slow.Next = slow.Next.Next //删除倒数第n个结点
return dumpy.Next
}