栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 题号:2 两数相加

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 题号:2 两数相加

题目:

链接:力扣https://leetcode.cn/problems/add-two-numbers/

刚看到题目时 我的思路是:将链表转换为一个十进制的数字,进行反转,接着两数相加, 然后取整数的各个为插入链表;即:

 最初我也是按照这个思路写的代码;如果链表的长度只有几位这种方法是可以跑过去的;但是我没有注意题目中链表的长度在1-100之间;那这样存在一个问题long long 类型数据最大2^63-1,当链表太长时没有类型可以放下由链表变换来的数字;那这种方法也就是错误的方法。

其实我们仔细读题可以发现每个数字是按逆序放在链表里的,也就是说我们将位置相同的节点相加,结果在一个新创建的链表中进行尾插不就直接得到答案了,其实大致的思路是可行的,但要考虑同位置节点相加大于10时需要进位,也就是将十位的数与下一个位置的节点相加完成进位。另外还有一点我们是进行同位置的节点相加,如果链表的长度不同我们就要用0补上。还有一些细节在代码中讲解,如下:

 代码:

struct ListNode* BuyNote(int x)
{
    struct ListNode* New = (struct ListNode*)malloc(sizeof(struct ListNode));
    assert(New);
    New->val = x;
    New->next = NULL;
    return New;
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    //因为链表的逆序,所以让两个链表的相同位置相加,放入新的链表,若相加大于10则进一 将进的一与后面的相加
    struct ListNode* head = BuyNote(0);
    assert(head);
    struct ListNode* tail = head;
    tail->next = NULL;

    struct ListNode* cur1 = l1;
    struct ListNode* cur2 = l2;

    int degree = 0; //存进位
    int n3 = 0;
    while(cur1 || cur2)
    {
        
        int n1 = (cur1 == NULL ? 0 : cur1->val);
        int n2 = (cur2 == NULL ? 0 : cur2->val);
        n3 = n1 + n2 + degree;
        if(n3 >= 10)
        {
            degree = n3 / 10;
            n3 = n3 % 10;
        }
        else
        {
            degree = 0;
        }
        struct ListNode* NewNote = BuyNote(n3);
        tail->next = NewNote;
        tail = tail->next;
        if(cur1)
        {
            cur1 = cur1->next;
        }
        if(cur2)
        {
            cur2 = cur2->next;
        }
        
    }
    if(degree != 0)
    {
        struct ListNode* NewNote = BuyNote(degree);
        tail->next = NewNote;
        tail = tail->next;
    }
    return head->next;
}

今天的博客就到这了,若你有更好的解题方法,欢迎留言^_^

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号