LeetCode2 Add Two Numbers

题目链接:

https://leetcode.com/problems/add-two-numbers/

题目描述:

给两个链表,代表两个非负数。逆序存储在链表节点中,例如(2 -> 4 -> 3)代表342。
将两个数相加,即两个链表相加。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

分析:

水题,其实就是链表的大数加法。诶,但是犯了几个小错误。

ptr1->val = (ptr1->val + ptr2->val + num) % 10;
ptr2->val = (ptr1->val + ptr2->val + num) % 10;

这样写是不对的,第一行代码已经将ptr1->val的值改变了,第二行是用改变之后的ptr1->val在计算。

嗯~~~QAQ代码有点冗余,等我考完试再想想能不能改改。T-T

代码:
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* ptr1=l1;
        ListNode* ptr2=l2;
        int cnt=0;
        int num=0;
        ListNode* ptr1_pre=l1;
        ListNode* ptr2_pre=l2;
        while(ptr1 && ptr2){
           num=cnt;
           cnt=(ptr1->val+ptr2->val+cnt)/10;
           int val1=(ptr1->val+ptr2->val+num)%10;
           int val2=(ptr1->val+ptr2->val+num)%10;
           ptr1->val=val1;
           ptr2->val=val2;
           ptr1_pre=ptr1;
           ptr2_pre=ptr2;
           ptr1=ptr1->next;
           ptr2=ptr2->next;
        }
        if(ptr1){
           while(ptr1){
               if(cnt){
                  num=cnt;
                  cnt=(ptr1->val+cnt)/10;
                  ptr1->val=(ptr1->val+num)%10;
               }
               ptr1_pre=ptr1;
               ptr1=ptr1->next;
          }
          if(cnt){
               ListNode* pNew=(ListNode*)malloc(sizeof(ListNode));
               pNew->val=cnt;
               pNew->next=NULL;
               ptr1_pre->next=pNew;
           }
           return l1;
        }
        else if(ptr2){
           while(ptr2){
               if(cnt){
                  num=cnt;
                  cnt=(ptr2->val+cnt)/10;
                  ptr2->val=(ptr2->val+num)%10;
               }
               ptr2_pre=ptr2;
               ptr2=ptr2->next;
          }
          if(cnt){
               ListNode* pNew=(ListNode*)malloc(sizeof(ListNode));
               pNew->val=cnt;
               pNew->next=NULL;
               ptr2_pre->next=pNew;
           }
           return l2;
        }
        else{
            if(cnt){
               ListNode* pNew=(ListNode*)malloc(sizeof(ListNode));
               pNew->val=cnt;
               pNew->next=NULL;
               ptr1_pre->next=pNew;
           }
            return l1;
        }

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值