//#2 Add Two Numbers
#include <iostream>
using namespace std;
/**
* 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 *l3(NULL);
if(l1 == NULL)
{
return l2;
}
if(l2 == NULL)
{
return l1;
}
//after this point, l1 and l2 both have a size of 1 or more
ListNode *p1(l1), *p2(l2), *p3(l3);
int carry(0);
ListNode *new_node_p(NULL);
new_node_p = new ListNode(0);
l3 = new_node_p;
p3 = l3;
new_node_p = NULL;
while(p1 != NULL && p2 != NULL)
{
int sum(0);
sum = p1->val + p2->val + carry;
carry = 0;
if(sum >= 10)
{
p3->val = sum - 10;
carry = 1;
}
else
{
p3->val = sum;
}
p1 = p1->next;
p2 = p2->next;
if( p1 != NULL && p2 != NULL )
{
new_node_p = new ListNode(0);
p3->next = new_node_p;
p3 = p3->next;
new_node_p = NULL;
}
}
//after this point, p1 == NULL || p2 == NULL
if( (p1 == NULL && p2 == NULL) && (carry == 1) )
{
new_node_p = new ListNode(1);
p3->next = new_node_p;
p3 = p3->next;
carry = 0;
new_node_p = NULL;
}
//cout << "p1 != NULL\n";
//list_print(l3);
//cin.get();
if(p1 != NULL)
{
while(p1 != NULL)
{
new_node_p = new ListNode(0);
p3->next = new_node_p;
p3 = p3->next;
new_node_p = NULL;
int sum(0);
sum = p1->val + carry;
carry = 0;
if(sum == 10)
{
p3->val = 0;
carry = 1;
}
else
{
p3->val = sum;
}
p1 = p1->next;
}
if(carry == 1)
{
new_node_p = new ListNode(1);
p3->next = new_node_p;
p3 = p3->next;
carry = 0;
new_node_p = NULL;
}
}
//cout << "p2 != NULL\n";
//list_print(l3);
//cin.get();
if(p2 != NULL)
{
while(p2 != NULL)
{
new_node_p = new ListNode(0);
p3->next = new_node_p;
p3 = p3->next;
new_node_p = NULL;
int sum(0);
sum = p2->val + carry;
carry = 0;
if(sum == 10)
{
p3->val = 0;
carry = 1;
}
else
{
p3->val = sum;
}
p2 = p2->next;
}
//cout << "Inside of p2 != NULL\n";
//list_print(l3);
//cin.get();
if(carry == 1)
{
new_node_p = new ListNode(1);
p3->next = new_node_p;
p3 = p3->next;
carry = 0;
new_node_p = NULL;
}
}
//cout << "return l3\n";
//cin.get();
return l3;
}
};
[Leetcode]#2 Add Two Numbers
最新推荐文章于 2024-07-12 18:12:33 发布