我正在尝试在Python中创建一个链表。我的问题是下面代码的init函数
class Node(object):
def __init__(self, data=None, next_node=None):
self.data = data
self.next_node = next_node
def get_data(self):
return self.data
def get_next(self):
return self.next_node
def set_next(self, new_next):
self.next_node = new_next
firstNode = Node(15)
secondNode = Node(20)
thirdNode = Node(25)
firstNode.next_node = secondNode
我想问一下我们是否可以在一个init调用中初始化一个节点(连同其数据和下一个节点链接)?
在上面的代码中,我首先在init调用中传递节点的data属性,然后在next_node属性的帮助下设置链接。有没有办法在单个init调用中完成这两项工作?
答案 0 :(得分:2)
是的,您可以通过嵌套类实例来实现。
例如,一个班轮在一次呼叫中设置所有三个节点
thirdNode = Node(25, Node(20, Node(15)))
print(thirdNode.data)
print(thirdNode.next_node.data)
print(thirdNode.next_node.next_node.data)
或者在调用中破坏代码,以使next_node
实例化新的Node
对象时被调用到构造函数中
firstNode = Node(15)
secondNode = Node(20, firstNode)
thirdNode = Node(25, secondNode)
print(thirdNode.data)
print(secondNode.data)
print(firstNode.data)
输出将为
25
20
15
答案 1 :(得分:1)
我将使用reduce
添加一个功能版本,将构建反向,将根节点数据设为4(您可以将数据反向):
from functools import reduce
ll = reduce(lambda x, y: Node(y, x), (1, 2, 3, 4), Node(0))
这里有live example