剑指 Offer II 025. 链表中的两数相加 #
- 标签:栈、链表、数学
- 难度:中等
题目大意 #
给定两个非空链表的头节点 l1
和 l2
来代表两个非负整数。数字最高位位于链表开始位置。每个节点只储存一位数字。除了数字 0
之外,这两个链表代表的数字都不会以 0
开头。
要求:将这两个数相加会返回一个新的链表。
解题思路 #
链表中最高位位于链表开始位置,最低位位于链表结束位置。这与我们做加法的数位顺序是相反的。为了将链表逆序,从而从低位开始处理数位,我们可以借用两个栈:将链表中所有数字分别压入两个栈中,再依次取出相加。
同时,在相加的时候,还要考虑进位问题。具体步骤如下:
- 将链表
l1
中所有节点值压入stack1
栈中,再将链表l2
中所有节点值压入stack2
栈中。 - 使用
res
存储新的结果链表,一开始指向None
,carry
记录进位。 - 如果
stack1
或stack2
不为空,或着进位carry
不为0
,则:- 从
stack1
中取出栈顶元素num1
,如果stack1
为空,则num1 = 0
。 - 从
stack2
中取出栈顶元素num2
,如果stack2
为空,则num2 = 0
。 - 计算相加结果,并计算进位。
- 建立新节点,存储进位后余下的值,并令其指向
res
。 res
指向新节点,继续判断。
- 从
- 如果
stack1
、stack2
都为空,并且进位carry
为0
,则输出res
。
代码 #
|
|