给你一个链表,删除链表的倒数第
n个结点,并且返回链表的头结点。示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
核心技巧
- 加虚拟头结点 dummy :规避删除头节点的边界问题
- 快慢指针 :快指针先走
n+1步,然后快慢同速往后走 - 快指针走到末尾时,慢指针刚好在倒数第 n 个节点的前驱
- 直接
slow.next = slow.next.next跳过要删的节点
python
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
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
