4.12每日一练

news2024/10/6 1:43:48

题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers
在这里插入图片描述
思路其实很简单
两个列表,因为是逆序,对应相加,多的进位就好了
直接上代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode*head=NULL;
    struct ListNode*tail=NULL;
    struct  ListNode*tmp=NULL;
    int carry=0;
    while(l1||l2)
    {
        int n1=l1?l1->val:0;
        int n2=l2?l2->val:0;
        int sum= n1+n2+carry;
        先做三目运算再赋值
        tmp=malloc(sizeof(struct ListNode));
        memset(tmp,0,sizeof(struct ListNode));这里我做个了检测并给了一个初始化
        毕竟学安全的
        写的代码还是要注意一下安全性
        if(tmp==NULL)
        {
            return 1;
        }
        if(head==NULL)
        {
           head=tail=tmp;
           tail->val=sum%10;
           tail->next=NULL; 
        }
        else
        {
            tail->next=tmp;
            tail->next->val=sum%10;
            tail=tail->next;
            tail->next=NULL;
        }
        carry=sum/10;
        if(l1)
        {
            l1=l1->next;
        }
        if(l2)
        {
            l2=l2->next;
        }
    }
    if (carry > 0) {
        tail->next = tmp;
        tail->next->val = carry;
        tail->next->next = NULL;
    }
    return head;
 
}

OK当你运行这个代码的时候一定会报错
在这里插入图片描述
为什么少了一个0?因为看最后一段tmp给的空间有问题

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode*head=NULL;
    struct ListNode*tail=NULL;
    struct  ListNode*tmp=NULL;
    int carry=0;
    while(l1||l2)
    {
        int n1=l1?l1->val:0;
        int n2=l2?l2->val:0;
        int sum= n1+n2+carry;
        //先做三目运算再赋值
        tmp=malloc(sizeof(struct ListNode));
        memset(tmp,0,sizeof(struct ListNode));
        if(tmp==NULL)
        {
            return 1;
        }
        if(head==NULL)
        {
           head=tail=tmp;
           tail->val=sum%10;
           tail->next=NULL; 
        }
        else
        {
            tail->next=tmp;
            tail->next->val=sum%10;
            tail=tail->next;
            tail->next=NULL;
        }
        carry=sum/10;
        if(l1)
        {
            l1=l1->next;
        }
        if(l2)
        {
            l2=l2->next;
        }
    }
    if (carry > 0) {
        tail->next =malloc(sizeof(struct ListNode)); ;
        tail->next->val = carry;
        tail->next->next = NULL;
    }
    return head;
 
}

把最后申请空间这里改改就好了
看看python代码,python有很多还没学
这里记录一下

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        if not l1:
            return l2
        if not l2:
            return l1

        l1.val += l2.val    # 将两数相加,赋值给 l1 节点
        if l1.val >= 10:
            l1.next = self.addTwoNumbers(ListNode(l1.val // 10), l1.next)
            l1.val %= 10
        
        l1.next = self.addTwoNumbers(l1.next, l2.next)
        return l1



作者:pedantic-shamiruww
链接:https://leetcode.cn/problems/add-two-numbers/solution/by-pedantic-shamiruww-p9h3/

这里是使用了一个递归算法
什么是递归?
在计算机导论里面学过,就不说了(调用自身函数)
https://blog.csdn.net/lltqyl/article/details/106604387

这里再说一种,用迭代法

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
 struct ListNode* res = (struct ListNode*)malloc(sizeof(struct ListNode));用一个哑节点(dummy node)提供迭代的初始参数;
 res->val = 0;
 res->next = NULL;
 struct ListNode* pre = res;
 int carry = 0;
 while (l1 || l2 || carry)只要有一个存在迭代就可以继续;
 {
  struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));
  int n1 = l1 ? l1->val : 0;
  int n2 = l2 ? l2->val : 0;
  int sum = n1 + n2 + carry;

  temp->val = sum % 10;
  temp->next = NULL;
  pre->next = temp;
  以上三行代码为新节点各域(数据域和指针域)赋值,并放置于前驱节点之后;

  pre = pre->next;
  carry = sum / 10;
  l1 = l1 ? l1->next : NULL;
  l2 = l2 ? l2->next : NULL;
  以上四行代码更新四个迭代参数;
 }
 return res->next;
}
作者:sui-xin-nt
https://leetcode.cn/problems/add-two-numbers/solution/chun-cxie-fa-1die-dai-xie-fa-by-sui-xin-7apuf/
这写得是真可以,我是没想出来

什么是迭代https://blog.csdn.net/qq_61453770/article/details/122812914?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168130018716800186539845%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168130018716800186539845&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-122812914-null-null.142v83pc_search_v2,201v4add_ask,239v2insert_chatgpt&utm_term=%E8%BF%AD%E4%BB%A3%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4187
记住:迭代的效率比递归高,尤其是计算次数多的时候

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学生信息管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87673902 更多系统资源库…

安全运营场景下的机器学习算法应用

观测到一个有意思的现象: 假设把安全划分为 基础安全 和 业务安全,PR类的议题中,会出现分级:基础安全领域,喜欢讲纵深防御,给出一个炫酷的架构图,然后各种技术关键字往上标;业务安全…

Doris集群的安装部署

目录 安装与部署 软硬件配置​ 1、机器选择 2、软件选择 3、环境信息修改和部署架构 4、安装部署Doris 5、启动FE 6、在FE节点启动MySQL客户端 7、在BE节点启动be 8、查看BE状态 8、查看FE状态是否正常 WEBUI 官方建议 安装与部署 该文档主要介绍了部署 Doris 所…

如何压缩Outlook数据文件大小

由于 Outlook 需要管理大量的电子邮件,Outlook 偶尔会出现问题是很正常的。 但是,如果你注意到 Outlook 打开或加载的时间过长,这可能是一个严重的问题。此外,你还可能面临其他问题,比如收件箱加载时间过长&#xff0…

WebWorker、ThreeJs的渲染和控制

在 ios16.4 版本中已经开始支持了 OffscreenCanvas ,那看样子,是时候再把Three做一波优化了 背景介绍 在之前的项目经验中,如果使用threejs加载比较大的3d场景,那么在创建 threejs 的对象和绘制的时候,会占用浏览器线…

认识C++《共、枚、指1》

目录 前言: 1.共用体的基本知识 2.匿名共用体 3.枚举 3.1设置枚举值 3.2枚举的应用场景 3.3枚举变量的取值范围 4.地址和自由存储空间 5.指针的思想 6.指针的声明和初始化 前言: 指针内容比较多,还需要再出一篇。久等了!!我看了我的…

数据库中的视图及三级模式结构

文章目录一、视图二、数据库三级模式结构一、视图 简单地说,视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据,可以简化查询语句。视图一经定义,用户就可以把它当作表一样来查询数据。 但视图和基本表不同&#xf…

Python算法设计 - Karatsuba乘法

版权声明:原创不易,本文禁止抄袭、转载,侵权必究! 目录一、Karatsuba 乘法二、算法思路三、Python算法实现四、作者Info一、Karatsuba 乘法 当你在纸上做两个数字的乘法时,一般我们都是用小时候学到的方法&#xff1a…

22.SSM-JdbcTemplate总结

目录 一、JdbcTemplate对象。 (1)Spring产生JdbcTemplate对象。 (2)JdbcTemplate常用操作。 (3)知识要点。 一、JdbcTemplate对象。 (1)Spring产生JdbcTemplate对象。 这个是Sp…

AIGC大模型时代下,该如何应用高性能计算PC集群打造游戏开发新模式?

ACT | SIM | ETC | FTG | RAC AVG | RPG | FPS | MUG | PUZ ACT、SIM、ETC、FTG、RAC、RTS、STG、AVG、RPG、FPS、MUG、PUZ、SLG、SPG等游戏类型,需要高性能的计算机来支持运行。为了满足这些游戏的需求,国内服务器厂商不断推出新的产品,采用…

定点数加减运算

定点数加减运算 文章目录定点数加减运算格式相同位宽相同但不同格式运算位宽不同的定点数运算1.转换为S5.10格式的相同位宽2.统一转换为S10.5格式的相同位宽定点数运算可直接通过处理器内置的整数单元实现格式相同 加减法就是对应二进制形式的有符号整数的加减运算 例如 2.71…

[Date structure]时间/空间复杂度

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现,有时候有C/C代码。 ⭐如果觉得文章写的…

手写锚点,且随着滚动屏幕自动高亮

入上图效果 通过判断几个id对应的dom离滚动区域上方的高度跟滚动区域高度对比高亮锚点 <template><div v-loading"totalLoading" class"define-target-container"><el-radio-group v-model"ucatsType" class"ucats-setti…

AUTOSAR Gateway介绍

概述 熟悉整车电子架构的朋友们都知道,Gateway(网关)在整车网络架构中协调不同物理链路数据的交换,发挥着数据中枢作用。本文为大家介绍AUTOSAR架构中Gateway的应用方式。 在AUTOSAR架构中,Signal、Signal Group或者PDU从一个源总线接收可以发送到一个或相同或不同协议的总…

ChatGPT可以做WebRTC音视频质量性能优化,惊艳到我了

摘要 随着GPT-4的发布&#xff0c;AI的风越吹越旺。GPT-4可以回答问题&#xff0c;可以写作&#xff0c;甚至可以基于一张草图生成html代码搭建一个网站。即构社区的一位开发者倪同学就基于目前在研究的WebRTC QoS技术点对GPT-3.5跟GPT-4进行一场实验&#xff0c;ChatGPT会取代…

HTTP与HTTPS的区别;TLS握手过程

一、HTTP协议与HTTPS 我们都知道当客户端与服务端需要进行通信时&#xff0c;需要根据一套协议来进行通信。 HTTP全程是超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指…

Redis应用问题及解决

目录 一.缓存穿透 1.1 问题描述 1.2 解决方案 二.缓存击穿 2.1 问题描述 2.2 解决方案 三.缓存雪崩 3.1 问题描述 3.2 解决方案 当数据库压力变大&#xff0c;导致服务访问数据库响应变慢&#xff0c;导致服务的压力变大&#xff0c;最终可能导致服务宕机。 一.缓存穿透 1.1 …

Linux编译器——gcc/g++使用

前言&#xff1a; 在上一篇&#xff0c;我们学习了关于文本编辑器 vim 的全部知识&#xff0c;今天给大家带来的是关于Linux编译器—gcc/使用的详细介绍。 本文目录 &#xff08;一&#xff09;温习程序的产生的过程 1、前言 2、程序的产生过程 3、&#x1f31c;初步认识 gc…

深度学习中的算法学习与记忆,利用故事联想帮助大家记忆,每个人都会

大家好&#xff0c;我是微学AI&#xff0c;大家看过我的文章&#xff0c;想必是对深度学习有了一定的了解了&#xff0c;但是对于初学者来说&#xff0c;深度学习中有很多名词和数学知识、原理还是不太清楚&#xff0c;记忆的不牢固&#xff0c;用起来不熟练&#xff0c;今天就…

网络安全 - Web应用防护墙(WAF)

什么WAF Web应用防护墙&#xff08;Web Application Firewall&#xff09;简称WAF。是一种特定形式的应用程序防火墙&#xff0c;用于过滤、监控和阻断通过网页服务的HTTP流量。通过监察HTTP流量&#xff0c;它可以防止利用网页应用程序已知漏洞的攻击&#xff0c;例如SQL 注入…