📌  相关文章
📜  从给定链表的末尾删除第 N 个节点(1)

📅  最后修改于: 2023-12-03 15:06:38.540000             🧑  作者: Mango

从给定链表的末尾删除第 N 个节点

如果你需要删除链表中倒数第 N 个节点,可以使用快慢指针的方法。首先将两个指针指向头节点,然后让其中一个指针向前移动 N 步。接下来,同时移动两个指针,直到第一个指针到达链表末尾,此时第二个指针指向的节点就是倒数第 N 个节点。最后,将倒数第 N 个节点的前一个节点的 next 指针指向倒数第 N 个节点的下一个节点即可完成删除操作。

以下是一个示例 Python 代码片段:

def remove_nth_from_end(head: ListNode, n: int) -> ListNode:
    # 创建虚拟头节点,简化删除第一个节点的情况
    dummy = ListNode(0)
    dummy.next = head

    # 创建快慢指针并初始化为虚拟头节点
    fast = slow = dummy

    # 将快指针向前移动 n 步
    for i in range(n):
        fast = fast.next

    # 同时移动快慢指针,直到快指针到达链表末尾
    while fast.next:
        fast = fast.next
        slow = slow.next

    # 删除倒数第 N 个节点
    slow.next = slow.next.next

    # 返回头节点
    return dummy.next

在上面的代码中,我们实现了从给定的链表末尾删除第 N 个节点的功能。我们首先创建了一个虚拟头节点,这样可以简化删除第一个节点的情况。然后创建了两个指针 fast 和 slow,并且将它们都初始化为虚拟头节点。接下来,我们让快指针向前移动 N 步,同时移动两个指针,直到快指针到达链表末尾,此时慢指针指向的就是要删除的节点的前一个节点。最后,我们删除倒数第 N 个节点,并返回头指针。

使用上面的方法,你可以快速简单地实现从给定链表的末尾删除第 N 个节点的操作。