167. Add Two Numbers

六眼飞鱼酱① 提交于 2020-01-22 11:25:38

167. Add Two Numbers

Description:

You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list.

Example
Example 1:

Input: 7->1->6->null, 5->9->2->null
Output: 2->1->9->null
Explanation: 617 + 295 = 912, 912 to list: 2->1->9->null
Example 2:

Input: 3->1->5->null, 5->9->2->null
Output: 8->0->8->null
Explanation: 513 + 295 = 808, 808 to list: 8->0->8->null

Main Idea:

Simulate the addition process from front to back, using a variable to record the carry of each addition. The carry is initially 0, and the number of nodes corresponding to each addition is added together with the carry. The modulo of 10 gets the corresponding position of the result.

Code:

/**
 * Definition of singly-linked-list:
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *        this->val = val;
 *        this->next = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param l1: the first list
     * @param l2: the second list
     * @return: the sum list of l1 and l2 
     */
    ListNode * addLists(ListNode * l1, ListNode * l2) {
        // write your code here
        ListNode* head = new ListNode(0);
        ListNode* ptr = head;
        int carry = 0;
        while(true){
            if(l1){
                carry += l1->val;
                l1 = l1->next;
            }
            
            if(l2){
                carry += l2->val;
                l2 = l2->next;
            }
            
            ptr->val = carry%10;
            carry /= 10;
            
            if(l1 || l2 || carry != 0){
                ptr = (ptr->next = new ListNode(0));
            }
            else 
                break;
            
        }
        return head;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!