Python 关于从2个链表中添加2个数字的指针的问题
我现在正在学习leetcode的主题,有一个关于从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
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也将“看到”此更改。这回答了你的问题吗?嗨,甜美而清晰——这回答了我的疑问。再次感谢您的大力帮助=)