Python链表:连接头与链表节点

时间:2017-06-13 17:37:43

标签: python algorithm linked-list

我正在尝试将数字转换为链接列表(例如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?

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。由于无法返回,我们需要保留头部的引用以返回它。