Add Two Numbers

Problem Statement 

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

The intuitive and easy addition is what we do by hand. So, the only problem is how to implement it exactly by list. The below code is elegant, which is filled with small list move trick.

 

class Solution {
public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        ListNode *t1 = l1, *t2 = l2; 
        ListNode res(0), *l = &res;
        int over = 0;
        
        while(t1 || t2 || over){
            int sum = (t1 ? t1->val : 0) + (t2 ? t2->val : 0) + over;
            
            l->next = new ListNode(sum % 10);
            l = l->next;
            over = sum / 10;
            
            t1 = t1 ? t1->next : t1;
            t2 = t2 ? t2->next : t2;
        }
        
        return res.next;
    }
};

 

posted @ 2014-12-24 15:09  kid551  阅读(123)  评论(0编辑  收藏  举报