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

命运之光 命运之光 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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;//返回新链表的头节点
...全文

相关推荐

LeetCode 两数相加C语言源码

/******************************************************************************************** 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。 将两数相加返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 *********************************************************************************************/

纯白棒球帽

Leetcode刷题python——(2)两数相加

文章目录题目指针节点使用节点来创建链表遍历链表向链表插入数据在链表开头插入数据在链表结尾插入数据在两个数据节点中间插入数据删除列表中的数据解题方案 题目 指针节点 有些情况下,存储数据的内存分配不能位于连续的内存块中。 所以接受指针的帮助,其中数据和数据元素的下一个位置的地址也被存储。 所以从当前数据元素的值中知道下一个数据元素的地址。通常这样的结构被称为指针。 但在Python中,将它们称为节点。 class daynames: def __init__(self, dataval=None): self.dataval = dataval self

weixin_38608189

LeetCode题解-两数相加python实现

leetcode两数相加 链表一、引言1.两数相加-Python实现2. 实验结果 一、引言 在leetcode做算法题时,并不需要写输入输出,但是在实际线上笔试的时候,需要自己调试。 本文以链表为例,讲解链表的插入以及链表的输出,还有链表的定义。 1.两数相加-Python实现 链表-两数相加-python语言实现 完整代码如下所示,请参考: import sys #定义节点 class ListNode: def __init__(self, x): self.value = x self.next = None #定义链表 class LinkLi

weixin_38597300

LeetCode 两数之和C语言源码

//给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 //你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用 //示例: //给定 nums = [2, 7, 11, 15], target = 9 //因为 nums[0] + nums[1] = 2 + 7 = 9 //所以返回 [0, 1]

纯白棒球帽

LeetCode刷题笔记——#2. 两数相加

难度:中等 一、题目描述: 二、解题分析:   根据题目这道题要注意两个点: 相加进位 两个链表长度不一定相等   这两个就是编程的时候要注意的。接下来依次看看不同的代码写法。   flag 作为进位位,用if对不同的可能性进行分类。 from typing import List ###### leetcode 代码主体 ###### class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: newNode=ListNode(0) ansNode

weixin_38548717
评论
收藏 已收藏
分享
返回顶部
命运之光
命运之光 优质创作者: 算法与数据结构技术领域 优质创作者: 算法与数据结构技术领域
知选星球社区 56,050 成员 140 内容