Leetcode :2 Add Two Numbers

LEETCODE:
题目信息


题意理解:

也就是给定两个非空链表,然后按照十进制加法处理这两个链表并存入一个新链表中。


先将解题代码放上:

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* l3;
        ListNode* old;
        bool ok = true;
        int zero = 0;
        while(l1 != NULL || l2 != NULL || zero != 0){
            int x = 0;

            if(l1 != NULL && l2 != NULL){
                x = (l1->val + l2->val + zero)%10 ;
                zero = (l1->val + l2->val + zero)/10;

                // cout<<x<<endl;

                l1 = l1->next;
                l2 = l2->next;

            }else if(l1 == NULL && l2 != NULL){
                x =  (l2->val + zero)%10;
                zero = (l2->val + zero)/10;
                l2 = l2->next;

            }else if(l1 != NULL && l2 == NULL){
                x =  (l1->val + zero)%10;
                zero = (l1->val + zero)/10;
                l1 = l1->next;
            }
            else
            {
                x = zero;
                zero = 0;
            }




            if(ok) {
                l3 = new ListNode(x);
                ok = false;
                old = l3;
            }else{
                l3->next = new ListNode(x);
                l3 = l3->next;
            }

        }

        return old;
    }
};
  • 算法:
    根据题意,我们可以知道,基本上这道题就是将两个”大“数加在一起,从个位开始按照十进制进位。
    所以我们可以取出两个链表相应位值的数字相加,然后用变量zero记录每次的进位,每次使用进位后在计算出进位即可。(参考高精度加法)
    解题过程中,各种测试例子基本都会存在,比较典型的是测试进位,l1比l2长,l2比l1长。
    所以按照相应情况分类讨论即可。

    -另一种思路(部分分):
    我们可以将两个链表分别化为一个数字,然后让他们想加,再逐个拆分数字存入链表即可。
    这样在链表很长的时候就不可行了,因为不存在一种类型能存放100位的整数,但是不失为一个不错的思考方向。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值