【问题标题】:Can we insert elements into a linked list using for-loop in python?我们可以在python中使用for循环将元素插入到链表中吗?
【发布时间】:2021-07-13 02:47:02
【问题描述】:

我实现了一个类似的单链表

class LinkList:
    def __init__(self):
        self.head = None 

class Node:
     def __init__(self, val=0):
        self.val = val
        self.next = None
a = [2, 5, 6, 3, 5, 6, 9]

我想知道我们是否可以使用for-loop 将上述列表的每个元素插入到链表中。

我尝试这样做,但它没有将所有值添加到列表中。这是我的尝试:

a = [2, 5, 6, 3, 5, 6, 9]
l.head = Node(a[0])
l.head.next = Node(a[1])
for i in range(1, len(a) - 1):
    Node(a[i]).next = Node(a[i + 1])

运行后,我打印链表,它只输出:

2
5

如何才能做到正确?

【问题讨论】:

    标签: python-3.x loops linked-list insert singly-linked-list


    【解决方案1】:

    是的,您可以使用for 循环。我将首先介绍我将如何做到这一点。

    首先改进Node 构造函数,以便您可以为其next 属性传递一个值:

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

    因此,如果您不传递那个额外的参数,这没有什么区别,但有时也传递那个参数会很有用。

    然后改进 LinkList 类的构造函数,以便您可以选择传递一系列值(例如作为列表)。然后构造函数可以进行循环。以相反的顺序循环遍历给定的序列是非常优雅的(我认为),这样您就可以将值 添加 到列表中:

    class LinkList:
        def __init__(self, seq=None):
            self.head = None 
            if seq is not None:
                for val in reversed(seq):
                    self.head = Node(val, self.head)
    

    现在您可以从单列中的列表创建链接列表:

    l = LinkList([2, 5, 6, 3, 5, 6, 9])
    

    关于你的尝试。您在循环体中所做的分配,每次都是对一个 new 节点,而不是对先前添加的节点。因此,您的节点不会全部链接在一起。在每次迭代中,您都会创建 两个 节点,其中第一个节点与第二个节点相连,但该对仍然与其他任何节点断开连接。

    相反,您应该保留对先前创建的节点的引用,并在循环的下一次迭代中使用它。显然,循环的一次迭代应该只创建一个 Node 实例,并从您保留的引用中链接它。

    这是您尝试的解决方法:

    l = LinkList()
    a = [2, 5, 6, 3, 5, 6, 9]
    node = Node(a[0])
    l.head = node
    for val in a[1:]:
        node.next = Node(val)
        node = node.next 
    

    【讨论】:

    • 感谢先生的简单解释和快速解答!
    • 先生您好!可以在此评论部分提出另一个相关问题吗?
    • 评论部分主要是为了获得澄清或指出答案中的问题。如果您有后续问题,请将其作为新问题提出。您可以随时让它参考您之前的问题,以便人们看到联系。
    • 非常感谢先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2022-06-14
    • 2021-05-15
    • 2010-10-11
    相关资源
    最近更新 更多