LeetCode19题:删除链表的倒数第N个结点(python3)

小明 2025-05-05 22:27:11 6

代���思路:

我们可以设想假设设定了双指针 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

The End
微信