LeetCode | 445. Add Two Numbers II

题目

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example 1:

在这里插入图片描述
Input: l1 = [7,2,4,3], l2 = [5,6,4]
Output: [7,8,0,7]

Example 2:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [8,0,7]

Example 3:

Input: l1 = [0], l2 = [0]
Output: [0]

Constraints:

The number of nodes in each linked list is in the range [1, 100].
0 <= Node.val <= 9
It is guaranteed that the list represents a number that does not have leading zeros.

代码

/**
 * 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) {
        stack<ListNode*> s1, s2;
        for(ListNode* p = l1; p != NULL; )
        {
            s1.push(p);
            p = p->next;
        }
        for(ListNode* p = l2; p != NULL; )
        {
            s2.push(p);
            p = p->next;
        }
        int jinwei = 0;
        stack<ListNode*> sRes;
        while(!s1.empty() && !s2.empty())
        {
            int curVal = s1.top()->val + s2.top()->val + jinwei;
            ListNode* curNode = new ListNode(curVal % 10);
            sRes.push(curNode);
            jinwei = curVal / 10;
            s1.pop();
            s2.pop();
        }
        if(!s1.empty())
        {
            while(!s1.empty())
            {
                int curVal = s1.top()->val + jinwei;
                ListNode* curNode = new ListNode(curVal % 10);
                jinwei = curVal / 10;
                sRes.push(curNode);
                s1.pop();
            }
        }
        if(!s2.empty())
        {
            while(!s2.empty())
            {
                int curVal = s2.top()->val + jinwei;
                ListNode* curNode = new ListNode(curVal % 10);
                jinwei = curVal / 10;
                sRes.push(curNode);
                s2.pop();
            }
        }
        if(jinwei)
        {
            ListNode* curNode = new ListNode(jinwei);
            jinwei = 0;
            sRes.push(curNode);
        }
        ListNode* res = NULL, *p = NULL;
        while(!sRes.empty())
        {
            if(res == NULL)
            {
                res = sRes.top();
                p = res;
            }
            else
            {
                p->next = sRes.top();
                p = p->next;
            }
            sRes.pop();
        }
        return res;   
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值