删除链表的倒数第 N 个结点
Remove Nth Node From End of List
本机进度仅保存在当前浏览器
题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。要求使用一趟扫描实现。
示例:1 -> 2 -> 3 -> 4 -> 5,n = 2,删除倒数第 2 个后为 1 -> 2 -> 3 -> 5。
解题思路
- 要删除倒数第 n 个节点,需要找到它的前驱节点;两趟扫描(先算长度)容易,一趟扫描用快慢指针。
- 快指针先走 n + 1 步,随后快慢指针同步前进;快指针到尾部时,慢指针恰好停在倒数第 n + 1 个节点(前驱)。
- 用哑节点指向头部,统一处理"删除头节点"的边界情况。
参考实现
查看参考实现Python · 建议先自行作答
def removeNthFromEnd(head, n):
# 快指针先走 n+1 步,慢指针停在待删节点的前驱
dummy = ListNode(0, head)
fast = slow = dummy
for _ in range(n + 1):
fast = fast.next
while fast:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return dummy.next