为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2022-05-24 12:59:52
我想形成一个按数字的数字顺序颠倒的链表。例如,如果数字是 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我希望从给定的数字以相反的顺序形成一个链表。我无法推断出这样做的逻辑。
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

当我处理数字问题时,我喜欢将数字提取与我最终对数字所做的任何事情分离。


def digits(n):

  # requires n >= 0, counts 0 as having no digits

  while n:

    yield n%10

    n //= 10


head = cur = ListNode(0)  # not part of the final list

for x in digits(number):

  cur.next = ListNode(x)

  cur = cur.next

head = head.next

当您迭代数字时,您需要处理第一个 ListNode(如果存在)的创建与其他 ListNode 略有不同,因为它没有父级。我通过创建一个假的起点来回避这一点,以便可以统一处理所有数字,然后忽略额外的对象。无论如何,你都是在一个函数中做这一切,所以垃圾收集器可以处理它。


查看完整回答
反对 回复 2022-05-24
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这是一个基于字符串反转的解决方案:


class ListNode:

    def __init__(self, x):

        self.val = x

        self.next = None


def 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 head


if __name__ == '__main__':

    result =form_linked_list(523)

    while(result):

        print(result.val)

        result = result.next


输出是:


1

3

2


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信