【LeetCode & 剑指offer刷题】链表题9:Add Two Numbers
【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)
Add Two Numbers
You are given two
non-empty
linked lists representing two non-negative integers. The digits are stored in
reverse order
and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example
Input:
(2 -> 4 -> 3) + (5 -> 6 -> 4)
Output:
7 -> 0 -> 8
Explanation:
342 + 465 = 807.
C++
//加链表表示的两个数,高位在链表后面,低位在前面
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
//紧凑
class
Solution
{
public
:
ListNode
*
addTwoNumbers
(
ListNode
*
l1
,
ListNode
*
l2
)
{
ListNode preHead
(
0
);
ListNode
*
p
=
&
preHead
;
//头结点,用于保存首结点指针,以及初始化p
int
carry
=
0
;
//进位
while
(
l1
||
l2
||
carry
)
//循环
{
int
sum
=
(
l1
?
l1
->
val
:
0
)
+
(
l2
?
l2
->
val
:
0
)
+
carry
;
//对应位相加,判断是否为空,若为空,相当于加0
carry
=
sum/10
;
//保存进位
p
->
next
=
new
ListNode
(
sum%10
);
//创建新的结点,并赋值,构造函数完成val和next指针的赋值
p
=
p
->
next
;
//指向下一个结点
l1
=
l1
?
l1
->
next
:
l1
;
//若为空,则仍为空,若不为空,指向下一个结点
l2
=
l2
?
l2
->
next
:
l2
;
}
return
preHead
.
next
;
//返回首结点指针
}
};