您的位置:首页 > 编程语言 > Go语言

[LeetCode] Add Two Numbers

2013-11-21 09:01 537 查看
You are given two linked lists representing two non-negative numbers. 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.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
问题描述:给定两个单链表,它们分别代表一个非负的整数,每个节点存储一个数字,将两个单链表代表的整数相加,并返回结果单链表。
这道题没说是在原单链表的基础上进行相加,还是建立一个新的单链表,简单起见,这里采用新建一个单链表来对两个链表进行相加。
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(l1 == NULL)
return l2;

if(l2 == NULL)
return l1;

int ain = 0;
int tmp = 0;

ListNode *p = l1, *q = l2;
ListNode *r = NULL, *m = NULL, *n = NULL;
while(p && q) {
tmp = p->val + q->val + ain;
ain = tmp / 10;
tmp = tmp % 10;
if(r == NULL) {
r = new ListNode(tmp);
m = r;
}
else {
m->next = new ListNode(tmp);
m = m->next;
}
p = p->next;
q = q->next;
}

while(p) {
tmp = p->val + ain;
ain = tmp / 10;
tmp = tmp % 10;
m->next = new ListNode(tmp);
m = m->next;
p = p->next;
}

while(q) {
tmp = q->val + ain;
ain = tmp / 10;
tmp = tmp % 10;
m->next = new ListNode(tmp);
m = m->next;
q = q->next;
}

if(ain) {
m->next = new ListNode(ain);
}

return r;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm leetcode