如何在迭代数字的数字时形成链表?

我想形成一个按数字的数字顺序颠倒的链表。例如,如果数字是 523,则链表将是 3->2->5。


我尝试迭代数字并形成一个列表,但我无法推断如何在 O(n) 中形成一个链表?!我当前的代码库被困在这里:


def form_linked_list(self, number):

    final_list = ListNode(number%10)

    number = int(number/10)

    while(number):

        final_list.next = ListNode(number%10)

        number = int(number/10)

    return final_list

我希望从给定的数字以相反的顺序形成一个链表。我无法推断出这样做的逻辑。


月关宝盒
浏览 105回答 2
2回答

红颜莎娜

当我处理数字问题时,我喜欢将数字提取与我最终对数字所做的任何事情分离。def digits(n):  # requires n >= 0, counts 0 as having no digits  while n:    yield n%10    n //= 10head = cur = ListNode(0)  # not part of the final listfor x in digits(number):  cur.next = ListNode(x)  cur = cur.nexthead = head.next当您迭代数字时,您需要处理第一个 ListNode(如果存在)的创建与其他 ListNode 略有不同,因为它没有父级。我通过创建一个假的起点来回避这一点,以便可以统一处理所有数字,然后忽略额外的对象。无论如何,你都是在一个函数中做这一切,所以垃圾收集器可以处理它。

牧羊人nacy

这是一个基于字符串反转的解决方案:class ListNode:    def __init__(self, x):        self.val = x        self.next = Nonedef form_linked_list(number):    number_str = str(number)[::-1]    if number_str:        head = ListNode(number_str[0])    for idx in range(1,len(number_str)):        if idx == 1:            head.next = ListNode(int(number_str[idx]))            temp = head.next        else:            temp.next = ListNode(int(number_str[idx]))            temp = temp.next    return headif __name__ == '__main__':    result =form_linked_list(523)    while(result):        print(result.val)        result = result.next输出是:132
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python