📌  相关文章
📜  如何使用递归在给定位置的单链表中插入节点(1)

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

如何使用递归在给定位置的单链表中插入节点

单链表是一种数据结构,它由多个节点组成,每个节点包含一个数据域和一个指针域,指针指向下一个节点。在单链表中插入新节点,需要改变与指定位置相邻的节点的指针域。递归算法是一种循环算法,它是将问题拆分成具有相同解决方法的子问题,以便最终解决整个问题。

描述

我们需要在单链表中插入一个新节点,位置用一个整数pos表示。在这个位置之前或之后插入都是可以的。如果原始链表为:1 -> 2 -> 3 -> 4 -> null,位置是2,那么我们需要在2和3之间插入一个新节点带有值5的节点,这样我们就构造了一个新的链表1 -> 2 -> 5 -> 3 -> 4 -> null。

算法

为了在单链表中插入节点,我们需要遍历链表,找到待插入位置的前一个节点。当我们到达要插入位置的前一个节点时,我们需要在该位置后插入新节点。

首先创建新节点并将其链接到链表中,然后我们必须确保原链表的顺序不被破坏。因此我们需要交换前一个节点和新节点之间的指针。

递归算法是一个逐步降低空间复杂度的算法。在每一次递归调用中,我们都会减少一个位置,直到找到要插入的位置。

代码实现

以下是使用递归实现单链表中插入节点的代码片段。

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def insert(self, head: ListNode, pos: int, val: int) -> ListNode:
        if not head:
            return ListNode(val)

        if pos == 1:
            node = ListNode(val)
            node.next = head
            return node

        head.next = self.insert(head.next, pos - 1, val)
        return head
代码说明

我们首先定义节点类ListNode,其中包含节点的值和一个指向下一个节点的指针。然后定义了一个名为Solution的类。

insert方法是递归函数的入口。此函数接受一个头节点和两个整数,分别是要插入的位置和要插入节点的值。如果链表为空,则创建一个新节点并返回该节点。如果要插入的位置是1,它是一个特殊情况,我们需要创建一个新节点并将其链接到头节点之前。最后,我们递归调用insert方法来处理剩余的节点。在每次递归调用中,我们都会将给定节点的下一个节点传递给递归函数,并将位置减1。当位置为1时,我们得到了要插入的节点位置。

最后,我们将新的节点插入并返回头节点。