如何从数字生成单链表?

时间:2019-07-30 06:52:43

标签: python linked-list singly-linked-list

我已经定义了一个类来制作链接列表,如下所示:

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”的长度来生成以上内容,而无需进行如上所述的硬编码?

1 个答案:

答案 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)