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
解析:主要是写了个将单链表逆转的代码。后来发现没用上啊。
#include <iostream>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL){}
};
ListNode *reverseTheLinkLists(ListNode *l)
{
ListNode *i;
ListNode *j;
ListNode *k;
if(l == NULL || l->next == NULL)
return l;
i = l;
j = l->next;
if(j->next == NULL)
{
i->next = NULL;
j->next = i;
return j;
}else{
k = j->next;
i->next = NULL;
while(k->next != NULL)
{
j->next = i;
i = j;
j = k;
k = j->next;
}
j->next = i;
k->next = j;
return k;
}
}
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
// l1 = reverseTheLinkLists(l1);
// l2 = reverseTheLinkLists(l2);
ListNode *p1 = l1;
ListNode *p2 = l2;
ListNode *res = NULL;
ListNode *q = NULL;
int index = 1;
int inc = 0;
while(p1!=NULL || p2!=NULL)
{
ListNode *elem = (ListNode *)malloc(sizeof(ListNode));
if(index == 1)
{
res = elem;
q = elem;
}else{
q->next = elem;
q = elem;
}
if(p1==NULL&&p2!=NULL)
{
int sum = p2->val + inc;
elem->val = sum%10;
inc = sum/10;
p2 = p2->next;
}
if(p1!=NULL&&p2==NULL)
{
int sum = p1->val + inc;
elem->val = sum%10;
inc = sum/10;
p1 = p1->next;
}
if(p1!=NULL&&p2!=NULL)
{
int sum = p1->val + p2->val + inc;
elem->val = sum%10;
inc = sum/10;
p1 = p1->next;
p2 = p2->next;
}
index++;
}
if(inc!=0)
{
ListNode *elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = inc;
q->next = elem;
q = elem;
}
if(q!=NULL)
q->next = NULL;
return res;
}
void printLinkLists(ListNode *l)
{
while(l!=NULL)
{
cout << l->val << " ";
l = l->next;
}
cout << endl;
}
int main(void)
{
ListNode *l1 = NULL;
ListNode *p = NULL;
ListNode *elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = 2;
l1 = elem;
p = elem;
elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = 4;
p->next = elem;
p = elem;
elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = 3;
p->next = elem;
p = elem;
p->next = NULL;
ListNode *l2 = NULL;
ListNode *q = NULL;
elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = 5;
l2 = elem;
q = elem;
elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = 6;
q->next = elem;
q = elem;
elem = (ListNode *)malloc(sizeof(ListNode));
elem->val = 4;
q->next = elem;
q = elem;
q->next = NULL;
printLinkLists(l1);
printLinkLists(l2);
ListNode *res = addTwoNumbers(l1, l2);
printLinkLists(res);
system("pause");
return 0;
}