新手笔记:LeetCode第二题 两数相加 c++

需要用到的变量

1.ListNode* head 链头

2.ListNode* tail 链尾

3.int count 用于判断两个节点的数相加是否超过10

4.int sum 两数相加的和,放进需要返回的链表里

代码看了官方题解,看明白了点又敲了一遍

代码

/**
 * 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* head=nullptr;  //链表头
        ListNode* tail=nullptr;  //链表尾
        int count=0; //用于判断两个表的节点相加是否超过10
        while(l1||l2) //全部为nullptr则不再执行
        {
            int sum=0; //用于放两数之和
            if(l1)  //如果到了nullptr,不执行
            {
                sum+=l1->val; //把l1表里的节点数据域里的值放进sum
                l1=l1->next; //l1指针前往下一个节点
            }
            if(l2) //如果到了nullptr,不执行
            {
                sum+=l2->val; //把l2表里的节点数据域里的值放进sum
                l2=l2->next;  //l2指针前往下一个节点
            }
            sum+=count; //第一次循环肯定是0,如果之后的节点相加超过10后,这个count会是1
            if(!head) //链表头指针是否已经指向一个节点作为头指针
            head=tail=new ListNode(sum%10); //没有则让指针指向一个新建的节点作为头指针,尾指针和头指针指向一个节点地址,新建的节点里的数据域是在10以内的,考虑到如果超过10,需要取余
            else
            {
                tail->next=new ListNode(sum%10); //否则尾指针指向的节点里的next指针指向一个新建的节点
                tail=tail->next; //尾指针前往新建的那个节点
            }
            count=sum/10; //count判断是否sum超过10
        }
        if(count>0) //循环结束后还有一次判断,万一最后的两个节点的值相加超过10却循环已经结束,无法执行循环体里的判断
        tail->next=new ListNode(count); //新建节点然后next指针指向新建的节点
        return head; //返回head指针
    }
};

题目写着两数相加之和但不能从链表里取数字组成三位数字相加等,如果链表里数大了甚至会超出long的范围

麻了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值