牛客题霸 [两个链表生成相加链表] C++题解/答案

题目描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

题解

先用两个栈来存两个链表的数,然后两个栈一起弹出,并加法运算后,将%10结果存在新的链表里
整个过程比较直接

代码:

/** * struct ListNode { * int val; * struct ListNode *next; * }; */

class Solution {
   
public:
    /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */
    ListNode* addInList(ListNode* head1, ListNode* head2) {
   
        // write code here
        stack<int> a;
        stack<int> b;
        while (head1 || head2)
        {
   
            if (head1)
            {
   
                a.push(head1->val);
                head1 = head1->next;
            }
            if (head2)
            {
   
                b.push(head2->val);
                head2 = head2->next;
            }
        }
        int sum = 0, carry = 0;
        ListNode* pre = new ListNode(-1);
        while (!a.empty() || !b.empty() || carry != 0)
        {
   
            int x = 0, y = 0;
            if (!a.empty())
            {
   
                x = a.top();
                a.pop();
            }
            if (!b.empty())
            {
   
                y = b.top();
                b.pop();
            }
            sum = x + y + carry;
            carry = sum / 10;
            sum = sum % 10;
            ListNode* cur = new ListNode(sum);
            cur->next = pre->next;
            pre->next = cur;
        }
        return pre->next;
    }
};