leetcode445.两数相加2

题目大意

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

进阶
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

示例

输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7

解题思路

将两个链表放入栈中,然后依次弹出相加。

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    	if (l1 == nullptr)
    		return l2;
    	if (l2 == nullptr)
    		return l1;

    	stack<int> s1, s2;
    	while (l1 != nullptr){
    		s1.push(l1->val);
    		l1 = l1->next;
    	}
    	while (l2!= nullptr){
    		s2.push(l2->val);
    		l2 = l2->next;
    	}

    	int tmp = 0;
    	ListNode * res = nullptr;
    	while (!s1.empty() || !s2.empty() || tmp != 0){
    		if (!s1.empty()){
    			tmp += s1.top();
    			s1.pop();
    		}
    		if (!s2.empty()){
    			tmp += s2.top();
    			s2.pop();
    		}

    		ListNode * tmpNode = new ListNode(tmp % 10);
    		tmpNode->next = res;
    		res = tmpNode;

    		tmp /= 10;
    	}

    	return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_41092190/article/details/106563589