【问题标题】:Adding two Numbers from ListNode and Returning a ListNode从 ListNode 添加两个数字并返回 ListNode
【发布时间】:2021-09-01 21:34:30
【问题描述】:

我正在尝试几个 LeetCode 练习,并且我设法编写了 95% 的解决方案,但我无法弄清楚结果。我最终查看了其中一个解决方案,发现它与我正在做的事情相似。我只是想知道是否有人可以为我解释他解决方案的最后部分:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        num1 = ''.join(joinList(l1)[::-1])
        num2 = ''.join(joinList(l2)[::-1])
        num3 = str(int(num1) + int(num2))[::-1]
        
        list = []
        
        for x in range(len(num3)):
            list.append(ListNode(int(num3[x])))

       ##################################
       #for x in range(len(list) - 1):  # <----------- Explain what this is doing, everything
       #    list[x].next = list[x + 1]  #              else I managed to write
       ##################################    
         
        return list[0]
        
def joinList(node):
    list = []
    x = node
    while x != None:
        list.append(str(x.val))
        x = x.next
    return list

我们的目标是:

给定两个代表两个非负整数的非空链表。这些数字以相反的顺序存储,它们的每个节点都包含一个数字。将两个数字相加并将总和作为链表返回。 你可以假设这两个数字不包含任何前导零,除了数字 0 本身。

我很困惑为什么需要将 list[0].next、list[1].next 设置为等于 list[x + 1]。

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    好的,list 变量中有 ListNode 条目。例如,如果您的总和结果是“1234”,则list 包含[ListNode(1), ListNode(2), ListNode(3), ListNode(4)]

    但是请注意,ListNode(1) 没有将其next 字段设置为任何值,而是None
    这是因为当您编写这段代码时:list.append(ListNode(int(num3[x]))),您并没有真正传递任何 next 值,因此它采用构造函数中指定的默认值 None,您可以在这里看到:@987654330 @。

    对于 ListNode(2)、ListNode(3) 和 ListNode(4) 也是如此。

    所以现在剩下要做的就是将 ListNode(1) 链接到 ListNode(2),方法是将 ListNode(1) 的 next 变量更改为引用 ListNode(2)
    这就是有问题的 for 循环正在做的事情。

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2019-10-24
      • 2019-12-16
      相关资源
      最近更新 更多