我正在尝试将数字转换为链接列表(例如617到7-> 1> 6)
这是我的代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param l1: the first list
# @param l2: the second list
# @return: the sum list of l1 and l2
def addLists(self, l1, l2):
# write your code here
num_1 = num_2 = 0
counter = 1
# convert each linked list to an integer
while l1 != None:
num_1 += l1.val * counter
l1 = l1.next
counter *= 10
# reset counter
counter = 1
while l2 != None:
num_2 += l2.val * counter
l2 = l2.next
counter *= 10
# perform the addition
my_sum = num_1 + num_2
# convert the sum back to a linked list
# initialize head
sum_head = ListNode(my_sum % 10)
sum_node = sum_head
my_sum //= 10
while my_sum != 0:
sum_node.next = ListNode(my_sum % 10)
sum_node = sum_node.next
my_sum //= 10
# return the the linked list
return sum_head
我对这部分进行了编码,这段代码可行。我只是不明白为什么" sum_head"能够链接到第二个节点" sum_node"。
这是Python中的一个例子:
a = <Object>
b = a
b只是对a的引用,这是正确的吗?
将617转换为7-> 1&gt; 6。按照我的代码,头部是7,链表的其余部分是7-> 1&gt; 6。头怎么知道下一个节点是1?
答案 0 :(得分:0)
前两个变量不是&#34;#34;链接&#34;在链表中。它们是同一个对象。如果替换等效表达式,这可能会更清楚:
sum_head = ListNode(my_sum % 10)
sum_node = sum_head
# ==
sum_node = sum_head = ListNode(my_sum % 10)
# So: sum_node.next is sum_head.next
为什么我们需要两个指向同一个对象的变量?因为在以下行中,我们更改sum_node指向的内容。它将成为之前对象的.next
。由于无法返回,我们需要保留头部的引用以返回它。