2. 两数相加——链表

  1. 题目链接

  2. 思路

    • 链表的方式,模拟加法的计算过程,用一个变量保存进位信息即可。
  3. 代码

    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            // 有一种办法可以节省空间,直接将结果放在l1或者l2上
            // 但是这样就改变了原来的数据  所以这里直接生成新的
            int carry = 0;    // 进位信息
            ListNode *ans = nullptr;
            ListNode *cur = nullptr;   // 指向结果链表的最后一个节点
            ListNode *node1 = l1;
            ListNode *node2 = l2;
            while(node1 != nullptr || node2 != nullptr) {
                int res = carry;
                carry = 0;
                if (node1 != nullptr) {
                    res += node1->val;
                    node1 = node1->next;
                }
                if (node2 != nullptr) {
                    res += node2->val;
                    node2 = node2->next;
                }
                ListNode *newNode = new ListNode(res % 10);
                if (ans == nullptr) {
                    ans = newNode;
                    cur = newNode;
                } else {
                    cur->next = newNode;
                    cur = newNode;
                }
                if (res >= 10) {   // 进位信息
                    res -= 10;
                    carry = 1;   
                }
            }
            if (carry != 0) {
                cur->next = new ListNode(1);
            }
            return ans;
        }
    };
    
posted @ 2024-12-16 09:46  ouyangxx  阅读(17)  评论(0)    收藏  举报