用双指针法解决,注意的点是慢指针要再慢一个节点,因为单向链表找前节点很麻烦,另一个是要建立空的头节点,可以方便操作

# 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

19. Remove Nth Node From End of List刷题笔记_leetcode