python 问题中的链表实现

Linked list implementation in python issue

提问人:Volpina 提问时间:11/27/2022 最后编辑:SamwiseVolpina 更新时间:11/28/2022 访问量:25

问:

我一直在尝试在 python 中实现链接列表。默认情况下,Python 中函数内部变量的任何调用都是通过引用调用。我有这个代码:

对于list_node:

class list_node:

    def __init__(self,obj,next_listnode):
        self.obj = obj
        self.next_listnode  = next_listnode

对于linked_list:

class linked_list:
    
    def __init__(self,list_node):
        self.list_node =list_node

    def add_node(self,obj):
        current = self.list_node
        while(current.next_listnode is not None):
            current = current.next_listnode
        current.next_listnode = obj;

    def print_linkedlist(self):
        current  = self.list_node
        while(current.next_listnode is not None):
            print("",current.obj)
            print("\n")
            current = current.next_listnode

我创建 2 list_nodes 1,其中我将其添加为链表的初始list_node,另一个使用函数add_node:

A = list_node("John",None)
B = list_node("Mike",None)
liste = linked_list(A)
liste.add_node(B)

liste.print_linkedlist();

但是,当我调用print_linkedlist函数时,它只打印 A list_node

我做错了什么? 然而

我尝试不调用add_node函数,但它没有打印任何内容。

Python 链接列表 传递引用

评论


答:

1赞 Samwise 11/28/2022 #1

如果在列表中再添加一个节点,问题就会变得更加清晰:

A = list_node("John",None)
B = list_node("Mike",None)
C = list_node("Biff",None)
liste = linked_list(A)
liste.add_node(B)
liste.add_node(C)

liste.print_linkedlist()

这会打印“John”和“Mike”——所以问题不在于你只打印第一个节点,而在于你没有打印最后一个节点。

这是因为你的函数在以下时间停止迭代——也就是说,一旦它到达最后一个节点(没有“下一个”节点的节点),它就会停止,并且它不会打印该节点print_linkedlistcurrent.next_listnode is not None

我建议这样做:

    def print_linkedlist(self):
        current = self.list_node
        while current:
            print(current.obj)
            current = current.next_listnode

以便打印列表的所有节点。