LeetCode:2.两数相加

目录

题目:​编辑2. 两数相加 - 力扣(LeetCode)

分析问题:

官方的优秀代码+博主的注释:

博主的辣眼代码,无注释,拉出来拷打自己:

每日表情包:


 

2. 两数相加 - 力扣(LeetCode)

题目:2. 两数相加 - 力扣(LeetCode)

分析问题:

本题目前来看,只能老老实实的做,仅有这一种做法:

1,首先排除,把每一个结点的val抠出来,再添回去的做法,这样复杂度会多很多,而且,链表的结点不可能太少,来个1000,你根本没法表示,

2,那么一来,很容易想到,分结点加,加好后放入新开辟的链表结点里,易想到有两种情况,加出超过10,和每超出10,而关于两个链表的长度不一致的做法,博主是分情况的,使代码复杂了,

而官方题解的解法很巧妙的避开了这个问题。

官方的优秀代码+博主的注释:

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {struct ListNode *head = NULL, *tail = NULL;int carry = 0;while (l1 || l2) {int n1 = l1 ? l1->val : 0;//当l1为NULL的时候视作val == 0int n2 = l2 ? l2->val : 0;int sum = n1 + n2 + carry;if (!head) {//解决单链表第一个结点不好扔循环的问题,//博主不喜欢这种操作,除了第一次,这个无用的判断走了很多轮head = tail = malloc(sizeof(struct ListNode));tail->val = sum % 10;tail->next = NULL;} else {tail->next = malloc(sizeof(struct ListNode));//持续创建新链表的结点和赋值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) {//最后检验会不会多出一个结点,例子:200+900 == 1100,三位进四位tail->next = malloc(sizeof(struct ListNode));tail->next->val = carry;tail->next->next = NULL;}return head;
}作者:力扣官方题解
链接:https://leetcode.cn/problems/add-two-numbers/solutions/435246/liang-shu-xiang-jia-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

博主的辣眼代码,无注释,拉出来拷打自己:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* BuyNode()
{struct ListNode* ps = (struct ListNode*)malloc(sizeof(struct ListNode));if(ps != NULL){ps->next = NULL;return ps;}else{return NULL;}
}
void CopyOther(struct ListNode* ps, struct ListNode* pcur)
{while(ps != NULL){pcur->next = BuyNode();pcur = pcur->next;;pcur->val = ps->val;ps = ps->next;}return;
}void Case3(struct ListNode* ps,struct ListNode* pcur)
{while(ps != NULL){if(ps->val + 1 >= 10){pcur->next = BuyNode();pcur = pcur->next;pcur->val = ps->val + 1 - 10;ps = ps->next;}else{pcur->next = BuyNode();pcur = pcur->next;pcur->val = ps->val + 1;ps = ps->next;CopyOther(ps, pcur);return;}}pcur->next = BuyNode();pcur = pcur->next;pcur->val = 1;return;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {struct ListNode* p1 = l1,*p2 = l2;struct ListNode* pReturn = BuyNode(), *pcur = pReturn;//pReturn 哨兵结点int tmp = 0;//进一while(p1 && p2){if(tmp + p1->val + p2->val >= 10){pcur->next = BuyNode();pcur->next->val = (tmp + p1->val + p2->val) - 10;pcur = pcur->next;tmp = 1;p1 = p1->next;p2 = p2->next;}else{pcur->next = BuyNode();pcur->next->val = tmp + p1->val + p2->val;pcur = pcur->next;tmp = 0;p1 = p1->next;p2 = p2->next;}}if(tmp){if(p1 == NULL){Case3(p2, pcur);return pReturn->next;}else{Case3(p1, pcur);return pReturn->next;}}if(p1 == NULL){CopyOther(p2, pcur);return pReturn->next;}else{CopyOther(p1, pcur);return pReturn->next;}
}

每日表情包:

"开窗!",这是我王小桃的地盘,不给点赞和收藏别想走 !

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

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

相关文章

面试经典150题——文本左右对齐(困难)

​"It always seems impossible until it’s done." - Nelson Mandela 1. 题目描述: 这个题目标为困难题目,但是如果我们静下心来把题目读懂了,其实无非就是不同情况下不同考虑而已,也没什么思维上的复杂,还…

Linux openKylin(开放麒麟)系统SSH服务安装配置与公网远程连接

文章目录 前言1. 安装SSH服务2. 本地SSH连接测试3. openKylin安装Cpolar4. 配置 SSH公网地址5. 公网远程SSH连接6. 固定SSH公网地址7. SSH固定地址连接8. 结语 前言 openKylin是中国首个基于Linux 的桌面操作系统开发者平台,通过开放操作系统源代码的方式&#xff…

C++:第十五讲高精度算法

每日C知识 system("color xx);是改变字体及背景颜色,前一个x代表一个数字,可以改变背景颜色,后一个x代表一个数字,可以改变字体颜色 ,但都是根据颜色表来的。 记住:要加头文件:#include&l…

手写分布式存储系统v0.3版本

引言 承接 手写分布式存储系统v0.2版本 ,今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的,那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是,张三家…

DevOps落地笔记-07|案例分析:如何有效管理第三方组件

上一讲主要介绍了如何通过代码预检查的方式提高入库代码的质量,将代码检查尽可能前置,降低修复问题的成本,从而提高交付软件的质量。除了代码本身的问题,依赖组件也是经常困扰开发者的一个问题。比如,依赖组件的某个版…

认识Tomcat (一)

认识Tomcat (一) 一、服务器 1.1 服务器简介 ​ 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。 ​ 软件服务器&…

深度学习(生成式模型)—— Consistency Models

文章目录 前言预备知识:SDE与ODEMethod实验结果 前言 Diffusion model需要多次推断才能生成最终的图像,这将耗费大量的计算资源。前几篇博客我们已经介绍了加速Diffusion model生成图像速率的DDIM和Stable Diffusion,本节将介绍最近大火的Co…

【Matplotlib】figure方法 你真的会了吗!?

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:matplotlib 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

解放双手!ChatGPT助力编写JAVA框架!

摘要 本文介绍了使用 ChatGPT逐步创建 一个简单的Java框架,包括构思、交流、深入优化、逐步完善和性能测试等步骤。 亲爱的Javaer们,在平时编码的过程中,你是否曾想过编写一个Java框架去为开发提效?但是要么编写框架时感觉无从下…

Tauri:相比Electron,还有很长路要走的。

一、Tauri是什么 Tauri是一个开源的框架,用于构建跨平台的桌面应用程序。它允许开发者使用Web技术(如HTML、CSS和JavaScript)来构建高性能的本地应用程序,同时提供了访问底层操作系统功能的能力。 Tauri的设计目标是提供一种简单…

第97讲:MHA高可用集群模拟主库故障以及修复过程

文章目录 1.分析主库故障后哪一个从库会切换为主库2.模拟主库故障观察剩余从库的状态2.1.模拟主库故障2.3.当前主从架构 3.修复故障的主库3.1.修复主库3.2.当前主从架构3.3.恢复MHA 1.分析主库故障后哪一个从库会切换为主库 在模拟MHA高可用集群主库故障之前,我们先…

【JavaSE篇】——抽象类和接口

目录 🎓抽象类 🎈抽象类语法 🎈抽象类特性 🎈抽象类的作用 🎓接口 🎈语法规则 🎈接口特性 🎈接口使用(实现USB接口) 🎈实现多个接口 🎈…

力扣刷题之旅:进阶篇(一)

力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 --点击进入刷题地址 题目1:三数之和 题目描述: 给定一个包含n个…

代码随想录算法训练营第41天 | 343.整数拆分 + 96.不同的二叉搜索树

今日任务 343. 整数拆分 96.不同的二叉搜索树 343.整数拆分 - Medium 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 )&#xff0…

springboot+vue实现excel导出

后端 导入pom依赖 <dependency>x<groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.2.0</version> </dependency> Entity实体类 这里以User为例&#xff0c;可按照自己实际…

vulhub中AppWeb认证绕过漏洞(CVE-2018-8715)

AppWeb是Embedthis Software LLC公司负责开发维护的一个基于GPL开源协议的嵌入式Web Server。他使用C/C来编写&#xff0c;能够运行在几乎先进所有流行的操作系统上。当然他最主要的应用场景还是为嵌入式设备提供Web Application容器。 AppWeb可以进行认证配置&#xff0c;其认…

【CSS】css如何实现字体大小小于12px?

【CSS】css如何实现字体大小小于12px? 问题解决方案transform: scale(0.5)&#xff08;常用&#xff09;SVG 矢量图设置text 问题 文字需要显示为12px&#xff0c;但是小于12px的&#xff0c;浏览器是显示不来的 解决方案 transform: scale(0.5)&#xff08;常用&#xff0…

树莓派-Ubuntu22.04

树莓派 1 安装Ubuntu系统2 ssh登录3 配置3.1 安装软件3.2 换源3.3 安装桌面3.4 开机脚本 1 安装Ubuntu系统 通过制作sdk&#xff0c;使系统在sdk中运行&#xff1a; 下载制作软件&#xff1a;https://www.raspberrypi.com/software/ 下载Ubuntu镜像&#xff1a;https://cn.ub…

【Day40】代码随想录之动态规划_343. 整数拆分_96.不同的二叉搜索树

文章目录 动态规划理论基础动规五部曲&#xff1a;出现结果不正确&#xff1a; 343. 整数拆分96.不同的二叉搜索树 动态规划理论基础 动规五部曲&#xff1a; 确定dp数组 下标及dp[i] 的含义。递推公式&#xff1a;比如斐波那契数列 dp[i] dp[i-1] dp[i-2]。初始化dp数组。…

基于Springboot开发的JavaWeb作业查重系统[附源码]

基于Springboot开发的JavaWeb作业查重系统[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &a…