Python 关于从2个链表中添加2个数字的指针的问题

Python 关于从2个链表中添加2个数字的指针的问题,python,python-3.x,Python,Python 3.x,我现在正在学习leetcode的主题,有一个关于从2个链表中添加2个数字的问题。示例如下: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807 当我在这里介绍解决方案时: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: p1 = l1

我现在正在学习leetcode的主题,有一个关于从2个链表中添加2个数字的问题。示例如下:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807
当我在这里介绍解决方案时:

def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        p1 = l1 
        p2 = l2
        carry = 0 

        head=p3=ListNode(0)

        while p1 or p2 or carry: 
            if p1:
                carry += p1.val
                p1 = p1.next
            if p2:
                carry += p2.val
                p2 = p2.next

            p3.val = carry % 10 
            carry = carry // 10

            if p1 or p2 or carry: 
                p3.next = ListNode(0)
                p3 = p3.next

        return head
对于返回值,这里有一个问题。 当我返回p3而不是直接返回head时,它返回最后一个值,即8

但是,当我返回head时,它会返回整个链表,即7->0->8 在wile循环中,与头部无关


p3值返回head时,背后的逻辑是什么

这仅仅是因为:

head=p3=ListNode(0)

您正在将
head
p3
都设置为指向最初创建的ListNode(最终包含数字7)

但是在
while
循环的这一行中:

p3 = p3.next
更新p3以指向新创建的ListNode


因此,在
while
循环结束时,
head
仍将指向第一个列表节点(因为它在
while
循环中没有发生任何事情),但
p3
将指向最后创建的列表节点,因为它正在不断更新。

这仅仅是因为:

head=p3=ListNode(0)

您正在将
head
p3
都设置为指向最初创建的ListNode(最终包含数字7)

但是在
while
循环的这一行中:

p3 = p3.next
更新p3以指向新创建的ListNode


因此,在
while
循环结束时,
head
仍将指向第一个列表节点(因为在
while
循环中它不会发生任何变化),但是
p3
将指向上次创建的ListNode,因为它正在不断更新。

您可以将列表设置为numpy数组,然后添加两个数组,然后反转链接列表

import numpy as np
l1 = [2, 4, 3]
l2 = [5, 6, 4]
l3 = np.array(l1) + np.array(l2)
l3[::-1]

希望这有帮助

您可以将列表设置为numpy数组,然后添加两个数组,然后反转链接列表

import numpy as np
l1 = [2, 4, 3]
l2 = [5, 6, 4]
l3 = np.array(l1) + np.array(l2)
l3[::-1]

希望这有帮助

实际上,问题提供了2个链表,而不是普通的列表作为输入……我确实想过将链表转换为列表,但我没有这样做。你知道我怎么做吗?无论如何,谢谢你的回答=)如果你在任何python列表后面添加
[::-1]
,元组。。。它将扭转这种局面。我最后这么做的原因是因为我只做一次就可以节省一些计算量,而且它仍然具有相同的效果。实际上,问题提供了2个链表,而不是普通的列表作为输入…我确实想过将链表转换为列表,但我没有这样做。你知道我怎么做吗?无论如何,谢谢你的回答=)如果你在任何python列表后面添加
[::-1]
,元组。。。它将扭转这种局面。最后我之所以这么做,是因为我只做一次就可以节省一些计算量,而且仍然会有同样的效果,谢谢!但这里有一个问题:在循环的每一轮中,当头总是指向第一个ListNode,p3指向最后创建的ListNode时,如何更新第一个ListNode?或者换句话说,为什么第一个ListNode从p3接收值?这是一个,意味着您正在将相同的ListNode对象分配给head和p3。第一个ListNode在循环的第一次迭代中更新。在p3.val=进位%10行上,用加法结果的数字更新p3的值。由于head和p3指向同一个ListNode对象,因此head也将“看到”此更改。这回答了你的问题吗?嗨,甜美而清晰——这回答了我的疑问。再次感谢你的大力帮助谢谢!但这里有一个问题:在循环的每一轮中,当头总是指向第一个ListNode,p3指向最后创建的ListNode时,如何更新第一个ListNode?或者换句话说,为什么第一个ListNode从p3接收值?这是一个,意味着您正在将相同的ListNode对象分配给head和p3。第一个ListNode在循环的第一次迭代中更新。在p3.val=进位%10行上,用加法结果的数字更新p3的值。由于head和p3指向同一个ListNode对象,因此head也将“看到”此更改。这回答了你的问题吗?嗨,甜美而清晰——这回答了我的疑问。再次感谢您的大力帮助=)