📅  最后修改于: 2023-12-03 15:07:57.756000             🧑  作者: Mango
假设我们有一个链表,像这样:
1 -> 2 -> 3 -> 4 -> 5
我们想要在从末尾开始的第2个节点之后插入一个节点,变成这样:
1 -> 2 -> 3 -> 6 -> 4 -> 5
该怎么实现呢?
我们可以使用两个指针来解决这个问题。一个指针先走n步,然后第二个指针从头开始走,两个指针同时向后,当第一个指针到达尾部时,第二个指针所在的位置就是从末尾开始的第n个节点。然后就可以在这个节点之后插入新节点了。
下面是 Python 代码实现:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def insert_after_nth_node_from_end(head: ListNode, n: int, val: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
first = dummy
second = dummy
# Move the first pointer n steps
for i in range(n):
first = first.next
# Move both pointers until the first pointer reaches the end
while first.next != None:
first = first.next
second = second.next
# Insert the new node
new_node = ListNode(val)
new_node.next = second.next
second.next = new_node
return dummy.next
下面是测试样例:
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
n = 2
val = 6
result = insert_after_nth_node_from_end(head, n, val)
while result != None:
print(result.val)
result = result.next
输出结果为:
1
2
3
6
4
5
至此,我们就成功地在从末尾开始的第2个节点之后插入了一个新节点。