作为一个更大项目的一部分,我正在尝试从标准列表生成一个链接列表。我已经在 SO 上浏览了一些关于这个问题的主题(例如这里(,但大多数代码的架构与我的有很大不同(linked-list 本身就是一个类(。只有最后一个答案与我的解决方案非常相似。
我在这里试图完成的是创建一个生成器,其中包括一个从给定输入创建链表的函数(这就是为什么这里的结构很僵化(。我也不能碰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
谢谢!
你的方向是正确的,只需在添加新节点后处理指针分配,还要保留对第一个节点的引用并返回:
def populate(self, in_list):
# creating the head node
curr = ListNode(in_list[0])
head = curr
# iterating over input list
for i in in_list[1:]:
temp = ListNode(i)
curr.next = temp
curr = temp
return head
完整代码:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Creator:
def populate(self, in_list):
# creating the head node
curr = ListNode(in_list[0])
head = curr
# iterating over input list
for i in in_list[1:]:
temp = ListNode(i)
curr.next = temp
curr = temp
return head
# 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