2020.11.29~两数相加~记第一次在LeetCode上刷题

在这里插入图片描述
题目实际上非常简单,但使用力扣平台和其他OJ平台不同,力扣不需要头文件,输入,输出,只需要按照给定的端口完成函数的编写,再返回即可。

#本题用到的思路:
倘若将此题放在其他OJ上,是非常简单的,但由于是在力扣,则需要按照力扣的规则解题。思路没什么好说的,两个链表中的数相加,可以选择维护进位值,也可以像我一样选择维护两个链表,使他们的长度相同,长度短者用零补之,再相加,其中有几个特别好的思路我想要在放出代码之后讲一下。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *p = l1,*q = l2;
        int len1 = 1,len2 = 1;
        while(p->next != NULL){
            len1++;
            p = p->next;
        }
        while(q->next != NULL){
            len2++;
            q = q->next;
        }
        if(len1>len2){
            for(int i=1;i<=len1-len2;i++){
                q->next = new ListNode(0);
                q = q->next;
            }
        }
        else{
            for(int i=1;i<=len2-len1;i++){
                p->next = new ListNode(0);
                p = p->next;
            }
        }
        ListNode *l3 = new ListNode(-1);
        ListNode *w = l3;
        int jw = 0;
        p = l1,q = l2;
        while(p != NULL&&q != NULL){
            int i = p->val + q->val + jw;
            w->next = new ListNode(i%10);
            if(i>=10)   jw = 1;
            else        jw = 0;
            w = w->next;
            p = p->next;
            q = q->next;
        }
        if(jw){
            w->next = new ListNode(1);
            w = w->next;
        }
        return l3->next;
    }
};

①构造函数的妙用:妙用了C++的构造函数。对于C++而言,struct结构体和class类实际上都是类,只是struct结构体对外默认为public访问权限,而class对外默认private。因此,就算是结构体,也可以像类一样拥有自己的构造函数,本题就是这样,不需要自己用new建立并初始化一大堆数据,来加入链表当中,只需要使用题目中预先给出的构造函数接口即可。
②进位值:由于是两个数相加,学编程的人一定接触过大整数运算,而这道题的思路与大整数加法完全一致,而加法进位的进位制只能是0或1,因此进位值甚至可以直接用布尔变量代替,虽然我的代码中没有展示。
③指针变量的移动:这并不是一个所谓好的思路,只是一个提醒。由于本人是第一次使用力扣刷题,尚未弄清如何调试,因此寻找错误花费了我一个小上午。不要忘记在最后相加时需要三个指针一起移动,缺一不可。
返回值:这也是一个提醒而不是一个思路,力扣不需要你帮助他输出,而需要返回一个值,这个值可能是一个数,一个字符串,一段链表甚至一个数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值