【无标题】LeetCode————c语言

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

这道题是把两个整数逆序存到两个链表里,然后把这两个整数相加后的数放到一个新链表中,返回新链表的地址

这里需要注意两个点

1.这俩个整数不一定是一样长度的

例如:21和134

所以我们这里逆序存放就是[1 2 0]和[4 3 1]

要按照长度较长的数字来考虑,把长度较短的后面置为0

2.这两个整数相加需要进位,特别是逆序的最后一位

例如:367和803

逆序存放就是[7 6 3]和[3 0 8]

相加之后是[0 7 5 1]

所以在新的链表中存放数字时要注意是否有进位

具体思路如下:我们遍历两个链表,将对应位置的数字相加,当两个链表的节点里都是0的时候我们就停止遍历,这样就不需要考虑一个链表中数字为0的情况,例如:230和123,我们在遍历的时候要设置一个终止条件,这里俩个方面的考虑,两个数字都是以0结尾的数字或者两个数字的最高位需要进位,这里我们把两个原链表按对应位置相加后的节点依次插入的新链表,然后直到两个原链表都为空并且没有进位数的时候停止循环。

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)

{

    //先创建一个新的链表存放要的结果

    //先创建一个哨兵位,用来找到我们新链表的地址

    struct ListNode* head=malloc(sizeof(struct ListNode));

    //再创建一个指针

    //用来指向新链表的最后一个节点

    //刚开始指向哨兵位

    struct ListNode* cur=head;

    //创建一个变量,用来判断是否要进位

    //因为两个各位数相加进位值必是1或者0

    int a=0;

    //遍历两个已给的链表,把对应位置的数字加到新链表上

    //把要进位的数字也加到进位的数字上

    //考虑一种特殊情况就是最后俩个数字的最高位加起来需要进位

    //但是两个链表后面的数字为0

    //则要把进位数字表示出来

    //需要把进位数字也作为一个判断的条件

    while(l1||l2||a)

    {

        //如果一个链表已经没有数字了

        //就把另一个链表的数字加到进位数上去就好了

        if(l1)

        {

            a=a+l1->val;

            l1=l1->next;

        }

        if(l2)

        {

            a=a+l2->val;

            l2=l2->next;

        }

        cur->next=malloc(sizeof(struct ListNode));

        //把进位数取余数是当前的位置上的数

        cur->next->val=a%10;

        cur->next->next=NULL;

        cur=cur->next;

        //下一位的进位后的数就是这一位的进位数除10;

        a/=10;

    }

    //把从哨兵位的下一个节点作为头节点返回

    return head->next;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光刺客884

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值