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

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

从链接列表的末尾删除第N个节点

在编程过程中,我们常常需要对链表进行操作。本篇文章将介绍如何删除链表的最后第N个节点。

算法思路

我们可以通过双指针法来解决此问题。

  1. 定义两个指针指向链表的头节点,让其中一个指针先向后移动N个节点;
  2. 此时两个指针之间的节点数为N,然后同时向后移动两个指针,直到先行指针到达链表的末尾;
  3. 此时后行指针指向的节点为倒数第N+1个节点,将其next指向next.next即可删除倒数第N个节点。
代码实现
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def removeNthFromEnd(head: ListNode, n: int) -> ListNode:
    dummy = ListNode(0)
    dummy.next = head
    slow = fast = dummy
    for i in range(n):
        fast = fast.next
    while fast.next:
        slow = slow.next
        fast = fast.next
    slow.next = slow.next.next
    return dummy.next
复杂度分析
  • 时间复杂度:$O(N)$,其中N为链表的长度。
  • 空间复杂度:$O(1)$,只需要用两个指针节点,不需要额外的空间。