木又同学2020年第2篇解题报告
leetcode第2题:两数相加
https://leetcode-cn.com/problems/add-two-numbers/
【题目】
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
【思路】
这道题看着挺简单的,但是细节很多。(当然,转换为数字,进行相加,最后转换成链表,这样的python代码几乎没有难度)
按照链表操作,首先要考虑进位,其次要考虑两个链表长度不一,三是链表相加完后可能还存在进位。
(比较高兴的是,这是我第一次写完代码,没做任何修改,一次通过~【机智】)
【代码】
python版本
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def deal_forward(self, val):
# 处理进位
add_one = 0
if val >= 10:
add_one = 1
val = val % 10
return val, add_one
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
add_one = 0
h1, h2 = l1, l2
l3, h3 = None, None
# 相加
while h1 and h2:
val = h1.val + h2.val + add_one
val, add_one = self.deal_forward(val)
h1, h2 = h1.next, h2.next
if h3 is None:
h3 = ListNode(val)
l3 = h3
else:
h3.next = ListNode(val)
h3 = h3.next
# 剩余部分
while h1:
val = h1.val + add_one
val, add_one = self.deal_forward(val)
h1 = h1.next
h3.next = ListNode(val)
h3 = h3.next
while h2:
val = h2.val + add_one
val, add_one = self.deal_forward(val)
h2 = h2.next
h3.next = ListNode(val)
h3 = h3.next
if add_one != 0:
h3.next = ListNode(add_one)
return l3
前一篇文章:【leetcode刷题】20T1-两数之和