如何从数字的数字生成单链表?

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)