【问题标题】:How can i initialize a linked list node with a single init call?如何使用单个 init 调用初始化链表节点?
【发布时间】:2019-05-27 14:04:11
【问题描述】:

我正在尝试在 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 调用中传递了节点的数据属性,然后我在 next_node 属性的帮助下设置了链接。有没有办法在一个 init 调用中完成这两项工作?

【问题讨论】:

  • 当然:firstNode = Node(15, secondNode)

标签: python python-3.x oop


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我将使用reduce添加一个功能版本,构建是反向的,是4根节点数据(你可以反向数据):

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

    这里有live example

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      相关资源
      最近更新 更多