167. Add Two Numbers

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;
    }
};
发布了28 篇原创文章 · 获赞 1 · 访问量 427

猜你喜欢

转载自blog.csdn.net/Zahb44856/article/details/104067367