LeetCode OJ-2.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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
Subscribe to see which companies asked this question.
题目理解
意思就是将两个链表当做两个数相加,链表1的第1个节点和链表2的第1个节点(存储的数值)相加,链表1的第2个节点和链表2的第2个节点相加,依次类推,得到的结果是第3个链表,如题目中例子所述。题目不难,要注意进位,两个链表可能长度不一样,具体需要注意的点代码中给出了注释,具体代码在下方。
Code
/
**
* Definition
for singly-linked list.
* struct ListNode {
*
int val;
* ListNode
*next;
* ListNode(
int x) : val(
x),
next(NULL) {}
* };
*/
void list_add(ListNode
**lst,
int __x)
{
if (!(
*lst)) {
*lst = new ListNode(__x);
return ;
}
else {
ListNode
*cur =
*lst;
while (cur->
next) {
cur = cur->
next;
}
cur->
next = new ListNode(__x);
return ;
}
}
void list_clear(ListNode
**lst)
{
if (!(
*lst)) {
return ;
}
ListNode
*tmp =
*lst;
ListNode
*next = tmp->
next;
while (tmp) {
delete tmp;
tmp =
next;
if (tmp) {
next = tmp->
next;
}
}
}
ListNode
*add_two_list(ListNode
*l1, ListNode
*l2)
{
ListNode
*res =
0;
ListNode
*cur1 = l1;
ListNode
*cur2 = l2;
int cur_sum =
0;
int next_sum =
0;
while (cur1 || cur2) {
// 两个链表长度可能不一样,要分别加到末尾
if (cur1 && cur2) {
// 两个链表都未加到末尾
cur_sum = cur1->val + cur2->val + next_sum;
next_sum = (cur_sum >
9) ?
1 :
0;
cur_sum
%= 10;
list_add(&res, cur_sum);
cur1 = cur1->
next;
cur2 = cur2->
next;
}
else if (cur1 && !cur2) {
// 链表l2已到末尾
cur_sum = cur1->val + next_sum;
next_sum = (cur_sum >
9) ?
1 :
0;
cur_sum
%= 10;
list_add(&res, cur_sum);
cur1 = cur1->
next;
}
else {
// 链表l1已到末尾
cur_sum = cur2->val + next_sum;
next_sum = (cur_sum >
9) ?
1 :
0;
cur_sum
%= 10;
list_add(&res, cur_sum);
cur2 = cur2->
next;
}
}
if (next_sum >
0) {
// 两个待相加的链表各自都加到末尾时,要注意进位是否为
0
list_add(&res, next_sum);
}
return res;
}
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
return add_two_list(l1, l2);
}
};
转载请注明原文地址: https://ju.6miu.com/read-11904.html