【发布时间】:2017-04-22 20:39:41
【问题描述】:
我对编码很陌生,我有一个关于在 Python 中打印双向链表中的节点的基本问题。
class Node():
def __init__(self, key = None, prev = None, next = None):
self.key = key
self.prev = prev
self.next = next
def __str__(self):
return ('[%s][%d][%s]' % (repr(self.prev), self.key, repr(self.next)))
显然,我为列表类本身提供了更多代码。假设我有一个包含两个节点的双向链表:
node1:键 21
node2:键 10
头 --> 节点1 节点2
如果我执行 print(node1),我会得到:
[*location of prev node*][21][*location of next node*]
这正是我想要的。
所以 2 个问题:
这段代码“混乱”还是 str 方法可接受的语法?
我将如何打印节点的 names 而不是打印 prev 和 next 节点的 location,例如
[node7][82][node9]?
希望这是有道理的,感谢您的帮助!
【问题讨论】:
-
1.没关系。 2. 你的节点没有名字。如果你想让他们有名字,那么你必须有一些
self.name属性。链表的特性之一是各个节点不知道它们在链表中的位置,只知道它们的邻居。 -
节点名称 - 至少,每个 Node 实例都应该有
name属性 -
@PatrickHaugh 感谢您的回复。好的,所以一旦我创建了一个节点,它就不知道自己的名字......我必须像你说的那样设置一个 self.name 属性......明白了!我猜这样做并不常见,因为它并不需要以漂亮的格式打印节点。
-
通常你只是通过它们的内容来引用节点。在大多数情况下,节点对象将持有一个键,该键是对内存中其他内容的引用(即指针)。所以指向内存位置
0xdeadbeef的节点将是node 0xdeadbeef -
如果你的列表有循环,你的
repr会堆栈溢出
标签: python linked-list repr