设置虚拟头节点,可以避免删除头节点的单独处理
算法流程:
- fast指针移动n步
- fast和slow一起移动,直到fast.next为none
- 此时slow为要删除节点的前一节点,将slow指向slow.next.next,删除slow.next
- 返回dummy.next
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
dummy=ListNode(next=head)
fast,slow=dummy,dummy
for _ in range(n):
fast=fast.next
while fast.next:
fast=fast.next
slow=slow.next
slow.next=slow.next.next
return dummy.next