如何通过单个init调用初始化链表节点?

时间:2019-05-27 14:04:11

标签: python-3.x oop

我正在尝试在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调用中完成这两项工作?

2 个答案:

答案 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