[LeetCode]2. Add Two Numbers

原题链接:https://leetcode.com/problems/add-two-numbers/description/

意思是给定两个存在链表中的数,输出和(同样存储在链表中)。

我的实现:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
#include<stack>

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        stack<int> result_stack;
        ListNode* result_list = NULL;
        int val, carry;
        
        carry = 0;
        
        while(l1 != NULL || l2 != NULL || carry != 0) {
            int l1_num, l2_num, sum;
            
            if (l1 == NULL) {
                l1_num = 0;
            } else {
                l1_num = l1->val;
                l1 = l1->next;
            }
            
            if (l2 == NULL) {
                l2_num = 0;
            } else {
                l2_num = l2->val;
                l2 = l2->next;
            }
            
            sum = l1_num + l2_num + carry;
            val = sum % 10;
            carry = sum / 10;
            
            result_stack.push(val);
        }
        
        while(!result_stack.empty()) {
            ListNode* result_node = new ListNode(result_stack.top());
            
            result_node->next = result_list;
            result_list = result_node;
            
            result_stack.pop();
        }
        
        return result_list;
    }
};

主要是注意进位,结果的保存。不要像我一样这么麻烦地保存结果的,直接在运算时构建结果链表即可。

原文地址:https://www.cnblogs.com/qianzixuan1996/p/8286848.html