如何用一个init调用初始化链表节点?

2024-05-14 02:55:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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属性,然后在下一个节点属性的帮助下设置链接。有没有办法在一个init调用中同时完成这两件事?你知道吗


Tags: 代码selfnonenodenewdatagetreturn
2条回答

是的,您可以通过嵌套类实例来实现这一点。
例如,一个命令行可以在一个调用中设置所有三个节点

thirdNode = Node(25, Node(20, Node(15)))
print(thirdNode.data)
print(thirdNode.next_node.data)
print(thirdNode.next_node.next_node.data)

或者在调用中中断代码,以便在实例化新的Node对象时将next_node调用到构造函数中

firstNode = Node(15)
secondNode = Node(20, firstNode)
thirdNode = Node(25, secondNode)
print(thirdNode.data)
print(secondNode.data)
print(firstNode.data)

输出将是

25
20
15

我将使用reduce添加一个函数版本,build is reversed,即根节点数据(您可以反转数据):

from functools import reduce
ll =  reduce(lambda x, y: Node(y, x), (1, 2, 3, 4), Node(0))

这是live example

相关问题 更多 >