知识点:
这里考察到了Python中的结构体,ListNode结构体构造如下:
Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
包含了数值和指向下一个块的指针。
Python中的链表和C++的链表的使用有所不同,Python中的更加简单一些,只需要一个变量指向结点即可,用ListNode(0)创建一个新的结点。
问题分析:
题目中是将所有的数逆序存储到一个链表中,最后要求将结果也逆序存储到一个列表中,实际上这里的逆序反而给我们了很多的方便,我们只需要按照每一个位的相加,然后进位,继续往后算即可,也就是相当于从个位、十位、百位、、、、这样计算下去。需要注意的点就是考虑是否需要进位,本位上最后放什么数。如果两个相加的数的结点已经结束,但是需要进位的话则需要另外创建一个新的结点来存储这个进位的值。(这里我一开始就出错了)
实现的源代码如下:
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
carry = 0 # 用作进位
node = ListNode(0); # 创建一个新的listnode结点
tmp = node; # tmp指向这个结点(用作移动的指针)
while (True):
if l1 != None:
sum1 = l1.val
l1 = l1.next
else:
sum1 = 0
if l2 != None:
sum2 = l2.val
l2 = l2.next
else:
sum2 = 0
print(sum1, sum2, carry)
modulo = (carry + sum1 + sum2) % 10
print('modulo', modulo)
tmp.val += modulo
carry = int((carry + sum1 + sum2) / 10)
print('carry', carry)
if l1!=None or l2 !=None or carry!=0:
tmp.next = ListNode(0)
tmp = tmp.next
else:
break
return node
关于LeetCode的解题方法 欢迎大家一起讨论~