给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
将两个数相加,并以相同形式返回一个表示和的链表。
假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例2:
输入:l1 = [9,9,9,9,9,9,9],l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
思路:依次相加即可,注意有进位、链表为空时的处理,python需注意浮点、整型运算。
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def assTwoNumber(self, l1, l2):
result = ListNode() # 结果链表
re = result # 不直接用result,为保留链表初始指针指向第一个节点
flag = 0 # 进位标识
while l1 or l2:
num1 = l1.val if l1 else 0
num2 = l2.val if l2 else 0
sums = num1 + num2 + flag
re.next = ListNode(sums % 10) # 相加结果
re = re.next
flag = int(sums / 10) # 进位处理
if l1: l1 = l1.next # 移动到下一个节点
if l2: l2 = l2.next
if flag: # 两个链表遍历完,还有进位
re.next = ListNode(1)
return result.next
if __name__ == "__main__":
l1 = ListNode(2, ListNode(4, ListNode(3)))
l2 = ListNode(5, ListNode(6, ListNode(4)))
re = Solution().assTwoNumber(l1, l2)
while re:
print(re.val, end=' ')
re = re.next
if - else 用法参见:https://blog.csdn.net/qq_43325582/article/details/122544661
另:采用一个变量直接存储每位相加结果。
def addTwoNumbers(self, l1, l2):
result = ListNode()
re = result
sums = 0
while l1 or l2 or sums:
if l1:
sums += l1.val
l1 = l1.next
if l2:
sums += l2.val
l2 = l2.next
re.next = ListNode(sums % 10)
re = re.next
sums = int(sums / 10)
return result.next
Java思路也是一致的,不过多阐述。