题目:2. 两数相加
链接:https://leetcode-cn.com/problems/add-two-numbers
问题:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
解题:
1、循环。考虑几个问题:第i个元素是否存在;进位。
代码:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
res = ListNode(0)
node = res
add = 0
node1, node2 = l1, l2
while node1 or node2:
# node1不为空
if node1:
add += node1.val
node1 = node1.next
# node2不为空
if node2:
add += node2.val
node2 = node2.next
# 链表元素 & 进位
node.next = ListNode(add % 10)
add //= 10
node = node.next
# 最后一个进位
if add:
node.next = ListNode(1)
return res.next
PS:刷了打卡群的题,再刷另一道题,并且总结,确实耗费很多时间。如果时间不够,以后的更新会总结打卡群的题。
PPS:还是得日更呀,总结一下总是好的。