如何从数字的数字生成单链表?
How to generate a Singly Linked List from a number's digits?
我定义了一个class做链表如下:
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" 的长度生成上述内容,而无需像上面那样进行硬编码?
你可以这样做:
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)
我定义了一个class做链表如下:
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" 的长度生成上述内容,而无需像上面那样进行硬编码?
你可以这样做:
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)