📅  最后修改于: 2023-12-03 14:50:48.565000             🧑  作者: Mango
给定一个链表,删除链表的倒数第n个节点,并返回链表的头节点。
例如,
给定一个链表:1->2->3->4->5,以及 n = 2。
当删除了倒数第二个节点后,链表变为1->2->3->5。
注意:
def remove_nth_node_from_end_of_list(head: ListNode, n: int) -> ListNode:
pass
head
:链表头节点。1 <= len(head) <= 30
。n
:正整数。返回处理后的链表的头节点。
输入:
head = [1,2,3,4,5], n = 2
输出:
[1,2,3,5]
解释:
我们需要找到倒数第2个节点。为此,我们可以使用两个指针——快指针和慢指针。
首先,让快指针向前走 n 步。 然后,同时移动快慢指针,直到快指针达到链表末尾。
删除第N个节点。
输入:
head = [1], n = 1
输出:
[]
输入:
head = [1, 2], n = 1
输出:
[1]
为了删除从列表末尾数的第N个节点,我们需要知道删除指向的节点的前一个节点的位置。
为此,我们可以使用两个指针——快指针和慢指针。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def remove_nth_node_from_end_of_list(head: ListNode, n: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
fast = slow = dummy
# Move the fast pointer n steps ahead
for i in range(n):
fast = fast.next
# Move the slow pointer and the fast pointer together
while fast.next is not None:
fast = fast.next
slow = slow.next
# Remove the nth node from the end
slow.next = slow.next.next
return dummy.next