📌  相关文章
📜  在从末尾开始的第 n 个节点之后插入一个节点(1)

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

在从末尾开始的第n个节点之后插入一个节点

假设我们有一个链表,像这样:

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个节点之后插入了一个新节点。