我正在尝试将一个数字字符串转换为一个整数链表。出于某种原因,当我打印链表中每个值的值时,它只打印第一个值。例如:字符串";523〃;将变成链接列表:5->2->3,但它只打印第一个节点值5。有人能帮我看看我缺了什么吗?谢谢你的帮助!
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
total = "523"
root = None
curr_node = None
for digit in total:
if root is None:
root = ListNode(int(digit), curr_node)
else:
curr_node = ListNode(int(digit))
curr_node = curr_node.next
while root:
print(root.val)
root = root.next
代码的问题是,为curr_node
分配新值不会更改当前分配给root.next
或curr_node.next
的None
值。相反,您应该保留对当前/最后一个节点本身的引用:
root = last = None
for digit in total:
if root is None:
root = last = ListNode(int(digit))
else:
last.next = last = ListNode(int(digit))
或者:创建一个类似链表的递归数据结构通常更容易,也更"简单";天然的";使用递归函数而不是循环:
def to_list(s):
if s:
return ListNode(int(s[0]), to_list(s[1:]))
else:
return None
root = to_list(total)