当前位置:实例文章 » 其他实例» [文章]19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点

发布人:shili8 发布时间:2025-01-15 17:34 阅读次数:0

**删除链表的倒数第 N 个节点**

在链表中,删除一个节点通常涉及到修改指向该节点的前驱节点的 next 指针。但是,如果我们要删除链表的倒数第 N 个节点,这个问题就变得更加复杂。因为我们需要先找到倒数第 N 个节点,然后再进行删除操作。

**解决方案**

我们的解决方案是使用两个指针来实现:一个快指针(fast pointer)和一个慢指针(slow pointer)。快指针会先走 N 步,然后慢指针就会从头开始追赶快指针。这样一来,当快指针到达链表的末尾时,慢指针就停留在倒数第 N 个节点处。

**代码示例**

class ListNode:
 def __init__(self, x):
 self.val = x self.next = Nonedef removeNthFromEnd(head: ListNode, n: int) -> ListNode:
 # 创建快指针和慢指针 fast = head slow = head # 快指针先走 N 步 for _ in range(n):
 fast = fast.next # 慢指针从头开始追赶快指针 while fast is not None and fast.next is not None:
 fast = fast.next slow = slow.next # 如果快指针到达链表的末尾,说明慢指针停留在倒数第 N 个节点处 if fast is None:
 return head.next # 删除倒数第 N 个节点 slow.next = slow.next.next return head# 测试代码head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)

n =2new_head = removeNthFromEnd(head, n)

while new_head is not None:
 print(new_head.val, end=" ")
 new_head = new_head.nextprint()


**注释**

* `ListNode` 类代表链表中的一个节点。
* `removeNthFromEnd` 函数负责删除链表的倒数第 N 个节点。
* 快指针和慢指针分别使用 `fast` 和 `slow` 变量来实现。
* 快指针先走 N 步,然后慢指针从头开始追赶快指针。
* 当快指针到达链表的末尾时,说明慢指针停留在倒数第 N 个节点处。
* 删除倒数第 N 个节点后,返回新的链表头。

**时间复杂度**

删除链表的倒数第 N 个节点的时间复杂度为 O(L),其中 L 是链表的长度。因为我们需要先找到倒数第 N 个节点,然后再进行删除操作。

**空间复杂度**

删除链表的倒数第 N 个节点的空间复杂度为 O(1),因为我们只使用了两个指针来实现。

相关标签:链表数据结构
其他信息

其他资源

Top