用双指针法解决,注意的点是慢指针要再慢一个节点,因为单向链表找前节点很麻烦,另一个是要建立空的头节点,可以方便操作
# 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: Optional[ListNode], n: int) -> Optional[ListNode]:
nullHead = ListNode(next = head)
fast = nullHead
for _ in range(n):
fast = fast.next
slow = nullHead
while fast.next is not None:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return nullHead.next