📅  最后修改于: 2023-12-03 15:26:09.111000             🧑  作者: Mango
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
例如,给定一个链表: 1->2->3->4->5,n = 2,删除倒数第二个节点之后,链表变为 1->2->3->5。
注意:给定的 n 始终是有效的。
此题需要删除链表的倒数第 n 个节点,那么可以考虑用双指针的方法。一个指针指向头节点,另一个指针比头指针晚 n 个节点,即第一个指针从链表头部移动 n 次后,第二个指针开始移动。当第二个指针移动到链表尾部时,第一个指针移动到链表倒数第 n 个节点,将其删除即可。
代码如下:
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
p1 = dummy
p2 = dummy
for i in range(n):
p2 = p2.next
while p2.next:
p1 = p1.next
p2 = p2.next
p1.next = p1.next.next
return dummy.next
具体解释如下:
时间复杂度为 O(L),其中 L 是链表的长度,需要遍历一次链表来找到倒数第 n 个节点并删除。空间复杂度为 O(1),需要两个指针来维护节点位置。
以上是对该问题的分析和解决方法,通过本篇文章的阅读,相信您已经掌握了这个问题的解决思路和实现方法。如果在阅读过程中还有不懂的地方或者需要更深入的讨论和交流,欢迎在评论区留言和我一起探讨,我会尽快回复您的问题。