我已经定义了一个类来制作链接列表,如下所示:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
现在,我生成了一个数字“ sum”,并编写了以下代码来生成“链接列表” :(假设该总和可能包含3或4位数字)
if len(str(sum)) == 4:
l3 = ListNode(str(sum)[3])
l3.next = ListNode(str(sum)[2])
l3.next.next = ListNode(str(sum)[1])
l3.next.next.next = ListNode(str(sum)[0])
elif len(str(sum)) == 3:
l3 = ListNode(str(sum)[2])
l3.next = ListNode(str(sum)[1])
l3.next.next = ListNode(str(sum)[0])
有没有一种方法可以使用数字“ sum”的长度来生成以上内容,而无需进行如上所述的硬编码?
答案 0 :(得分:1)
您可以执行以下操作:
s = str(975)
start_node = node = ListNode(s[-1]) # initialize to last character in s
for c in reversed(s[:-1]):
node.next = ListNode(c)
node = node.next
start_node
现在应该包含第一个节点;从那里可以.next
到下一个节点。 node
始终指向循环中的当前节点(并且可以在循环后丢弃)。
请注意,sum
是内置函数,因此不是很好的变量名...
上面代码的输出:
print(start_node.val) # 5
print(start_node.next.val) # 7
print(start_node.next.next.val) # 9
print(start_node.next.next.next) # None
您甚至可以将代码编写得更紧凑(但imo的可读性更差):
start_node = node = ListNode(s[-1])
for c in reversed(s[:-1]):
node.next = node = ListNode(c)