给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
#include <iostream>
#include <windows.h>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* result = new ListNode(0);
ListNode* p = NULL;
ListNode* q = result;
ListNode* index1 = l1;
ListNode* index2 = l2;
int inNum = 0;//进位
while (index1 && index2) {
int temp = index1->val + index2->val + inNum;
if (temp >= 10) {
inNum = 1;
temp -= 10;
}
else
inNum = 0;
p = new ListNode(temp);
q->next = p;
q = q->next;
index1 = index1->next;
index2 = index2->next;
}
if (index1) {
q->next = index1;
while (index1 && inNum == 1) {
index1->val += 1;
if (index1->val >= 10) {
index1->val -= 10;
inNum = 1;
}
else
inNum = 0;
index1 = index1->next;
}
}
else if (index2) {
q->next = index2;
while (index2 && inNum == 1) {
index2->val += 1;
if (index2->val >= 10) {
index2->val -= 10;
inNum = 1;
}
else
inNum = 0;
index2 = index2->next;
}
}
while (q && q->next)
q = q->next;
if (inNum == 1) {
ListNode* fin = new ListNode(1);
q->next = fin;
}
return result->next;
}
int main() {
ListNode* l1 = new ListNode(9);
ListNode* p = new ListNode(9);
// ListNode* q = new ListNode(3);
l1->next = p;
// p->next = q;
ListNode* l2 = new ListNode(1);
// p = new ListNode(6);
// q = new ListNode(4);
// l2->next = p;
// p->next = q;
ListNode* result = addTwoNumbers(l1, l2);
ListNode* q = result;
while(q) {
cout << q->val;
q = q->next;
}
system("pause");
return 0;
}