leetcode 2

   
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        
       int carry=0,sum,x,y;
        ListNode q(0),*tmp1=l1,*tmp2=l2,*re=&q;
        
        while(tmp1||tmp2)
        {
            x=tmp1?tmp1->val:0;
            y=tmp2?tmp2->val:0;
            
            sum=x+y+carry;
            re->next=new ListNode (sum%10);
            re=re->next;
            carry=sum/10;
            if(tmp1->next)
            tmp1=tmp1->next;
            if(tmp2->next)
            tmp2=tmp2->next;
        }
        
        if(carry)
            re->next=new ListNode(carry);
        delete tmp1;
        delete tmp2;
    
        return q.next;
    }

memory exceeded

    ListNode preHead(0), *p = &preHead;
    int extra = 0;
    while (l1 || l2 || extra) {
        int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra;
        extra = sum / 10;
        p->next = new ListNode(sum % 10);
        p = p->next;
        l1 = l1 ? l1->next : l1;
        l2 = l2 ? l2->next : l2;
    }
    return preHead.next;


看过的解法里,思路都是一样的,但是有的把carry定义为bool型,使得速度更快一点,但我还是觉得定义为int更自然一点;还有的区别就是要不要再重新定义两个L     istNode 类的指针以保存L1和L2的位置,就本题而言,没有必要保存的,但是在有些情况下保存还是很有必要的

从本题中收获到的,首先再次回顾了“加法”这一套路,然后有学习到了“结构体结合加法”的套路。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值