1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Add Two Numbers

Posted on 2013-10-09 14:22  1957  阅读(215)  评论(0编辑  收藏  举报

- -简单题

处理好进位,还有两个链表不一样长就好

/**
 * 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) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if (l1 == NULL) return l2;
        if (l2 == NULL) return l1;

        int val = (l1 -> val + l2 -> val) % 10 ;
        int mod = (l1 -> val + l2 -> val) / 10;
        
        ListNode* head = new ListNode(val);
        ListNode* tmp = head;
        l1 = l1 -> next ; l2 = l2 -> next;
        
        while(l1 != NULL && l2 != NULL){
            val = (l1 -> val + l2 -> val + mod) % 10;
            mod = (l1 -> val + l2 -> val + mod) / 10;
            
            ListNode* newN = new ListNode(val);
            tmp -> next = newN;
            tmp = newN;
            l1 = l1 -> next ; l2 = l2 -> next;
        }
        if(l1 != NULL){
    
            while(l1 != NULL)     
            {
                val = (l1 -> val + mod) % 10;
                mod = (l1 -> val + mod) / 10;
            
                ListNode* newN = new ListNode(val);
                tmp -> next = newN;
                tmp = newN;
                l1 = l1 -> next;
            }
        }
        if(l2 != NULL){
            while(l2 != NULL)     
            {
                val = (l2 -> val + mod) % 10;
                mod = (l2 -> val + mod) / 10;
            
                ListNode* newN = new ListNode(val);
                tmp -> next = newN;
                tmp = newN;
                l2 = l2 -> next;
            }
            
        }
        if(mod > 0){
            ListNode* newN = new ListNode(mod);
            tmp -> next = newN;
        }
        return head;
    }
};