Lintcode167.链表求和C++

1.问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和

2.解题思路:从两条链表的最开始节点一个个相加每的个节点只能存取<10的元素,所以直接对于每次节点相加的值取余,保存取余之后的值,通过/10来保存进位的值,每次存入值的时候就新建节点来保存数据,还要判断两条链表的情况,根据是否为空,那一条先为空来分类,最后总结写出代码。注意不要空间复杂度和时间复杂度不要太高。

3.通过的代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    /**
     * @param l1: the first list
     * @param l2: the second list
     * @return: the sum list of l1 and l2
     */
    ListNode *addLists(ListNode *l1, ListNode *l2) {
        // write your code here
         if(l1==NULL&&l2==NULL) return NULL;
        ListNode *head=new ListNode(0);
        ListNode *rear=head;
        int m=0;
        while(l1!=NULL&&l2!=NULL)
        {
            m=l1->val+l2->val+m;
            rear->next=new ListNode(m%10);
            l1=l1->next;
            l2=l2->next;
            rear=rear->next;
            m=m/10;
        }
        ListNode *temp;
        if(l1==NULL){temp=l2;}else{temp=l1;}
        while(temp!=NULL)
        {
            m=temp->val+m;
            rear->next=new ListNode(m%10);
            temp=temp->next;
            rear=rear->next;
            m=m/10;
        }
        if(m==1)
        rear->next=new ListNode(1);
        return head->next;
    }
};

4.感想:

做这道题简直一波三折,刚开始觉得好难啊,怎么写啊,不知道怎么写,但是看以前的解决问题的代码的时候突然来了思路,清清楚楚的搞懂了题意,自己就开始写代码,自己刚开始写的就是分很多种情况,程序很长,提交的代码就是wrong answer 改正了一些小错误之后 又出现runtime error,运行时出现错误,我觉得自己代码是正确的,自己也画图验证了很多次,但是每次都是这个错误,自己看了看是自己在创建节点的时候出现了错误。改过的还是没有通过。我在百度上搜索了一下答案,感觉我们的思路是差不多,只是我的有些繁琐,我又自己简化了一下程序,还是一直出现错误MLE,说我空间复杂度太高了,一直不让我通过。问了问其他人,他们有的人也有这样的错误,他们让我把有些两步的步骤融合成了一步。之后就通过了,最后对于这道题对于我来说也是最印象深刻的一道题,从开始思考思路到真正的通过用了两天半的时间,对于他的不能通过的原因还是没有太明白,下一步会问问同学或者是老师搞明白的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值