【问题标题】:I am trying to write a program to add two integer lists. Here is my implementation:我正在尝试编写一个程序来添加两个整数列表。这是我的实现:
【发布时间】:2016-12-23 08:27:28
【问题描述】:
class Solution:

def addTwoListInt(self,l1,l2):
    if l1==None:
        return l2

    if l2==None:
        return l1

    res = None


    len1 = 0
    #head1=l1

    while l1!=None:
        len1+=1
        head1=head1.next

    len2 = 0
    #head2=l2

    while l2!=None:
        len2+=1
        head2=head2.next

    if len1<len2:
        longer = l2
        shorter = l1
    else:
        longer = l1
        shorter = l2

    carry = 0


    while shorter!=None:
        val = shorter.data + longer.data + carry
        carry = val//10
        val -= carry*10

        if res==None:
            res = Node(val)
            result = res
        else:
            res.next = Node(val)
            res = res.next

        shorter = shorter.next
        longer = longer.next

    while longer!=None:
        val = longer.data + carry
        carry = val//10
        val -= carry*10

        res.next = Node(val)
        res = res.next

        longer = longer.next

    if carry!=0:
        res.next = Node(carry)
        res=res.next

    return result

如果我不将 head1 和 head2 用于作为列表标题的 l1 和 l2,则该函数返回 UnbondLocalError 表示结果在分配之前已被引用,如果我将 l1 和 l2 分配为 head1 和 head2 并且它有效与他们一起继续代码。我想知道如果我不在函数中本地分配它们会发生什么以及为什么它不起作用。

【问题讨论】:

  • 你似乎把事情复杂化了 :) 当列表的长度不同时必须返回什么?
  • 当我在这里使用像 head1/head2 这样的局部变量时,我的代码运行完美,但如果我尝试直接使用参数值,它会输出错误。在某些情况下它有效,而在其他情况下则无效。我想要一个关于这个的解释。暂时先忽略代码的复杂性吧。
  • 我希望得到这样的答案:a = [1, 2, 3]; b = [4, 5, 6];地图(λx,y:x+y,a,b);输出[19]:[5、7、9]。但是当列表长度不同时需要进行一些修改。这种情况下的预期结果是什么?
  • 我完全明白你的做法。但在这里,我试图从头开始使用链表来实现这一点。我的问题是,如果我不为传递的参数分配局部变量并使用该参数来遍历列表,会有什么问题?

标签: python-3.x data-structures linked-list


【解决方案1】:

如果没有head1head2,您将拥有:

len1 = 0
while l1!=None:
    len1+=1
    l1=l1.next
// when the loop exits, l1==None

len2 = 0
while l2!=None:
    len2+=1
    l2=l2.next
// when the loop exits, l2 == None

此时,l1l2 都是 None。所以你最终将None 分配给shorterlonger。因此,您的任何循环都不会被输入,res 也不会被赋值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2022-01-25
    • 2020-06-23
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多