当前位置:编程学习 > C/C++ >>

Add Two Numbers

Question:
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
 
 
Anwser 1:
[cpp]  
/** 
 * 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) {  
        // Start typing your C/C++ solution below  
        if(l1 == NULL && l2 == NULL) {  
            return NULL;  
        }  
          
        ListNode *retList = new ListNode(0);  
        ListNode *tmpList = retList;  
          
        ListNode *head1 = l1;  
        ListNode *head2 = l2;  
        int carry = 0;  
        while(head1 != NULL && head2 != NULL){  
            int sum = carry + head1->val + head2->val;  
            carry = sum / 10;  
            tmpList->next = new ListNode(sum % 10);  
            tmpList = tmpList->next;  
              
            head1 = head1->next;  
            head2 = head2->next;  
        }  
          
        while(head1 != NULL){  
            int sum = carry + head1->val;  
            carry = sum / 10;  
            tmpList->next = new ListNode(sum % 10);  
            tmpList = tmpList->next;  
              
            head1 = head1->next;  
        }  
          
        while(head2 != NULL){  
            int sum = carry + head2->val;  
            carry = sum / 10;  
            tmpList->next = new ListNode(sum % 10);  
            tmpList = tmpList->next;  
              
            head2 = head2->next;  
        }  
          
        if(carry == 1){  
            tmpList->next = new ListNode(1);  
        }  
        tmpList = retList;  
        retList = retList->next;  
          
        delete tmpList;  
          
        return retList;  
    }  
};  
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,