继续用博客记录学习LeetCode的过程啦!
题目如下:
题目的大意是输入为两个非空的链表,每个链表的数字已相反的顺序存储,添加这两个数字并返回新的链表。
如链表1:(2 -> 4 -> 5 -> 7 -> 9)链表2:(1 -> 2 -> 3)
链表1代表数字:97542
链表2代表数字:321
相加得到:97863
返回链表则为(3 -> 6 -> 8 -> 7 -> 9)
分析题目:
题目主要考察的是链表的应用,需要注意的是进位,以及两个链表不等长的情况。题目中提到的倒序其实有点迷惑,所谓的倒序既低位放在了前面,高位放在了后面。而我们做加法其实就是由低位加到高位(既先计算个位,在计算十位。。。)
那么如果链表等长,我们只需要对应位置相加,结点之和大于10的情况我们进1,即可。
如果链表不等长,我们先将链表等长的地方相加,余下位置放入长链表中未相加的结点即可,同样需要进位。
那么按照上述思路,我们需要一个进位标志flag。一个新的链表放入结果,resultNode。
代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 == None:
return l2
if l2 == None:
return l1
resultNode = ListNode(0)
p = resultNode
flag = 0
while l1 and l2:
sum = l1.val + l2.val + flag
flag = 0
if sum >9:
sum -= 10
flag = 1
p.next = ListNode(sum)
l1 = l1.next
l2 = l2.next
p = p.next
if l1:
while l1:
sum = l1.val + flag
flag = 0
if sum >9:
sum -= 10
flag = 1
p.next = ListNode(sum)
l1 = l1.next
p = p.next
if l2:
while l2:
sum = l2.val + flag
flag = 0
if sum >9:
sum -= 10
flag = 1
p.next = ListNode(sum)
l2 = l2.next
p = p.next
if flag:
p.next = ListNode(flag)
p = p.next
return resultNode.next
代码中需要注意的是,如果链表等长时,进位标志flag = 1时,仍需把flag放入结点。
主要时考察对链表的使用。题目不是很难。
以上,祝好!