代码思路:
我们可以设想假设设定了双指针 p 和 q 的话,当 q 指向末尾的 NULL,p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的下一个指针就完成了要求。
1.设置虚拟节点 dummyHead 指向 head
2.设定双指针 p 和 q,初始都指向虚拟节点 dummyHead
3.移动 q,直到 p 与 q 之间相隔的元素个数为 n
4.同时移动 p 与 q,直到 q 指向的为 NULL
5.将 p 的下一个节点指向下下个节点
# 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]:
fast = slow = dummy_head = ListNode(next=head)
while n:
fast = fast.next
n -= 1
while fast.next:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return dummy_head.next