2. 两数相加

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *dummyhead = new ListNode(0);
        ListNode *cur = dummyhead;
        int carry = 0, sum = 0;
        while(l1 || l2){
            int x = (l1 == nullptr? 0 : l1->val);
            int y = (l2 == nullptr? 0 : l2->val);
            sum = x + y + carry;
            carry = sum/10;
            sum = sum%10;
            cur->next = new ListNode(sum);
            cur = cur->next;
            if(l1) l1 = l1->next;
            if(l2) l2 = l2->next;
        }
        if(carry == 1) cur->next = new ListNode(carry);
        return dummyhead->next;
    }
};
复制代码

思路:如果l1与l2不等长,那么空的部位用0补齐继续做加和运算;设置一个carry用来记录上一次加和的进位情况,并用在当前加和中;最后结束的时候要判断是否还有进位,如有,那么最后添加一个1(因为两个数相加的最大和不超过20)。

posted on   小黑哈哈  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?



点击右上角即可分享
微信分享提示