[LeetCode] Add Two Numbers

2014-11-24 02:34:47 · 作者: · 浏览: 1
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
问题描述:给定两个单链表,它们分别代表一个非负的整数,每个节点存储一个数字,将两个单链表代表的整数相加,并返回结果单链表。
这道题没说是在原单链表的基础上进行相加,还是建立一个新的单链表,简单起见,这里采用新建一个单链表来对两个链表进行相加。
class Solution {  
public:  
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {  
        // IMPORTANT: Please reset any member data you declared, as  
        // the same Solution instance will be reused for each test case.  
        if(l1 == NULL)  
            return l2;  
          
        if(l2 == NULL)  
            return l1;  
          
        int ain = 0;  
        int tmp = 0;  
          
        ListNode *p = l1, *q = l2;  
        ListNode *r = NULL, *m = NULL, *n = NULL;  
        while(p && q) {  
            tmp = p->
val + q->val + ain; ain = tmp / 10; tmp = tmp % 10; if(r == NULL) { r = new ListNode(tmp); m = r; } else { m->next = new ListNode(tmp); m = m->next; } p = p->next; q = q->next; } while(p) { tmp = p->val + ain; ain = tmp / 10; tmp = tmp % 10; m->next = new ListNode(tmp); m = m->next; p = p->next; } while(q) { tmp = q->val + ain; ain = tmp / 10; tmp = tmp % 10; m->next = new ListNode(tmp); m = m->next; q = q->next; } if(ain) { m->next = new ListNode(ain); } return r; } };