刷题笔记:两数(链表)相加

3月9日

 

解法:首先创建一个新节点作为返回链表的头节点,然后创建一个移动指针指向它,然后设置一个flag表示有无进位。采用补0的方法,让两个链表中相同位置逐个相加即可,最后链表加完之后判断flag是否为1,若为1表示有进位,则需要再添加一个节点赋值1,若为0表示无进位,直接返回即可。注意是返回头节点的下一个节点。

第一次脑残的解法:

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

        ListNode *newHead = new ListNode(-1);

        ListNode *newH = newHead;

        int flag=0;

        while(l1!=nullptr&&l2!=nullptr)

        {

            int a =l1->val+l2->val+flag;

            if(a>=10)

            {

                newH->next = new ListNode(a%10);

                flag=1;

            }

            else

            {

                newH->next=new ListNode(a);

                flag=0;

            }

            newH=newH->next;

            l1=l1->next;

            l2=l2->next;

        }

        while(l2!=nullptr&&l1==nullptr)

        {

            newH->next=l2;

            int a = l2->val+flag;

            if(a>=10)

            {

                l2->val = a%10;

                flag =1;

            }

            else

            {

                l2->val=a;

                flag=0;
            }

            l2=l2->next;

            newH=newH->next;  

        }

        while(l2==nullptr&&l1!=nullptr)

        {

            newH->next = l1;

            int a=l1->val+flag;

            if(a>=10)

            {

                l1->val=a%10;

                flag=1;

            }

            else

            {

                l1->val=a;

                flag=0;

            }

            l1=l1->next;

            newH = newH->next;

        }

        if(flag==1)

        {

            newH->next= new ListNode(1);

        }

        return newHead->next;

    }

这个解法思路也很清晰,就是首先将两个链表对齐的部分相加,然后再将对齐之后多出来的那节直接补到最后,每部分都要判断有无进位,相当繁琐,费时。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值