Leetcode两数相加(第一次分享)——学习

命运之光 修行初阶
算法领域优质创作者
2023-10-04 18:18:44

img

img

/**
 * 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;//申请尾节点
    //上面的申请方式是申请链表的常用方式,head,tail一块申请。
    int carry=0;    //用carry定义进位数
    while( l1 || l2)//用循环来查找l1,和l2链表
        {
            int n1 = l1 ? l1->val : 0;//查找链表l1中每一个节点的值,非空就赋值给n1
            int n2 = l2 ? l2->val : 0;//同上
            int sum = n1 + n2 + carry;//两数相加
            if(!head)//看头节点是否为空,为空就走下面的
            {
                head = tail = new ListNode(sum % 10);//给头节点赋值,大于10取余,我们只要个位的数字
            }
            else//头节点不为空,就通过尾节点不断给新链表后面加入新值
            {
                tail->next = new ListNode(sum % 10);//给尾节点赋值,大于10取余,我们只要个位的数字
                tail = tail->next;//将节点移到下一位
            }
            carry = sum / 10;//进位数,看看进了几位,后面都要加上去
            if (l1)//如果L1链表不为空执行下面操作
            {
                l1 = l1->next;//移动节点
            }
            if (l2)//如果L2链表不为空执行下面操作
            {
                l2 = l2->next;//移动节点
            }
        }
    //循环结束
    if (carry > 0)//可能会出现最后carry不为零的现象,这时候要在进一位
    {
        tail->next = new ListNode(carry);//在新链表后面在加一位,值为carry的值
    }
    return head;//返回新链表的头节点
}
};

好物必学——核心

方法的创建(参数与方法的类型这块写的真好)

 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2){
     //省略
 }

链表的创建

ListNode *head=nullptr;//申请头节点
ListNode *tail=nullptr;//申请尾节点

链表的赋值

int n1 = l1 ? l1->val : 0;//查找链表l1中每一个节点的值,非空就赋值给n1

创建新链表的赋值(写的真好)

if(!head)//看头节点是否为空,为空就走下面的
{
    head = tail = new ListNode(sum % 10);//给头节点赋值,大于10取余,我们只要个位的数字
}
else//头节点不为空,就通过尾节点不断给新链表后面加入新值
{
    tail->next = new ListNode(sum % 10);//给尾节点赋值,大于10取余,我们只要个位的数字
    tail = tail->next;//将节点移到下一位
}

链表的移动

if (l1)//如果L1链表不为空执行下面操作
{
    l1 = l1->next;//移动节点
}

返回创建的新链表(这个也好)

 return head;//返回新链表的头节点
...全文
98 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

43,401

社区成员

发帖
与我相关
我的任务
社区描述
CodeCrafters联盟是一个致力于汇聚热衷编程、技术和创新的专业人士的社区。我们的使命是为开发人员、工程师和技术爱好者提供一个共享知识、交流经验以及不断学习成长的平台。
学习java算法 个人社区 陕西省·西安市
社区管理员
  • 命运之光
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

1、这是命运之光(个人社区),欢迎您的加入;

2、发表帖子的时候请注意用语文明;

3、欢迎大家在遵守上一条的前提下积极发帖,多多交流;

4、点赞、评论都会使自己的积分上升的,欢迎大家积极参与;

5、如果有什么关于社区的疑问可以私信版主:命运之光

试试用AI创作助手写篇文章吧