【leetcode】2. 两数相加(add-two-numbers)(模拟)[中等]

215 篇文章 0 订阅
66 篇文章 0 订阅

链接

https://leetcode-cn.com/problems/add-two-numbers/

耗时

解题:16 min
题解:5 min

题意

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

思路

模拟加法,链表逆序并且相同位置的位阶对应,所以同时顺序遍历两链表,将两链表对应位加和并加上进位即可。

时间复杂度: O ( m a x ( m , n ) ) O(max(m, n)) O(max(m,n))

AC代码

/**
 * 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* head = new ListNode();
        ListNode* res = head;
        ListNode* p = l1, *q = l2;
        int add = 0;
        while(p != NULL || q != NULL || add != 0) {
            int x = (p==NULL?0:(p->val));
            int y = (q==NULL?0:(q->val));
            int sum = x+y+add;
            ListNode* s = new ListNode(sum%10);
            res->next = s;
            res = res->next;
            p = (p==NULL?p:(p->next));
            q = (q==NULL?q:(q->next));
            add = sum/10;
        }
        return head->next;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值