【发布时间】:2019-08-27 17:39:54
【问题描述】:
作为更大项目的一部分,我正在尝试从标准列表生成链接列表。我已经在 SO(例如here)上查看了有关此问题的一些主题,但大多数代码的架构与我的架构大不相同(链表本身就是一个类)。只有最后一个答案与我的解决方案非常相似。
我在这里尝试完成的是创建一个生成器,其中包含一个从给定输入创建链接列表的函数(这就是为什么这里的结构是刚性的)。我也不能触摸 ListNode 类。
我尝试了以下代码,但它只返回单元素链表,列表的最后一个元素作为节点。
我有一种感觉,我很接近,但缺少一些东西。如果需要,我可以创建辅助函数,但理想情况下,我想避免它。有人有什么想法吗?哪里错了?
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Creator:
def populate(self, in_list):
# creating the head node
out_list = ListNode(in_list[0])
curr = out_list
# iterating over input list
for i in in_list[1:]:
curr = curr.next
curr = ListNode(i)
return curr
# Below the manual approach for a list of four elements/nodes
# manual_list = ListNode(1)
# manual_list.next = ListNode(2)
# manual_list.next.next = ListNode(3)
# manual_list.next.next.next = ListNode(4)
inputs = [1,2,3,4]
result = Creator().populate(inputs)
while result:
print(result.val)
result = result.next
谢谢!
【问题讨论】:
-
“但大多数代码的架构与我的有很大不同(链表本身就是一个类)。”这是相当标准的,我认为最好的做法。不过,到底为什么你还要使用链表呢?老实说,在学校练习之外,我永远无法想象一个好的用例来在 python 中滚动你自己的链表实现。你几乎总是只使用一个普通的
list对象,或者可能是一个collections.deque顺便说一句,你的Creator类可能应该只是一个常规函数,它作为一个类没有任何作用...... -
完全正确 - 这是处理非标准数据结构的教育项目的一部分。我从来没有在日常工作中使用过这些。
标签: python linked-list