1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51


struct ListNode 
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};


ListNode *AddTwoNumbers(ListNode *l1, ListNode *l2) 
{
    if (!l1) return l2;
    if (!l2) return l1;

    int val = l1->val + l2->val;
    bool carried = (val>9);
    ListNode* head = new ListNode(val%10);
    ListNode* p =head;

    l1 = l1->next;
    l2 = l2->next;

    //add up number in each node
    while(l1 && l2)
    {
        val = l1->val + l2->val + (carried? 1 : 0);
        carried = (val > 9);
        p->next = new ListNode(val%10);

        l1 = l1->next;
        l2 = l2->next;
        p = p->next;
    }

    //Add up the remain numbers with carried
    ListNode* remain = l1? l1 : l2;
    while(remain)
    {
        val = remain->val + (carried? 1 : 0);
        carried = (val > 9);
        p->next = new ListNode(val%10);

        p = p->next;
        remain=remain->nex;
    }
    
    //if there still has carried, add '1'
    if (carried)p->next = new ListNode(1);

    return head;
}
View Program Text


Test Status