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.hqwc.cn/news/453437.html

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

相关文章

SpringBoot异步任务

一、注解实现 EnableAsync注解 创建一个配置类,并在类上添加EnableAsync注解,用来启用异步支持。 Configuration EnableAsync public class AsyncConfig { }或者,在启动类上添加EnableAsync注解,用来启用异步支持。 EnableAsy…

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案 大家好 我是寸铁👊 总结了一篇Error: only one service expected goctl一键转换生成rpc服务错误解决方案的文章✨ 喜欢的小伙伴可以点点关注 💝 问题背景 今天寸铁在…

最新GPT4.0使用教程,AI绘画,GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…

大模型日报-20240204

文章目录 大模型也有小偷?为保护你的参数,上交大给大模型制作「人类可读指纹」阿里全新Agent玩转手机:刷短视频自主点赞评论,还学会了跨应用操作代谢数据集上四项指标达94%~98%,西南交大团队开发多尺度图神经网络框架&…

2024杭州国际安防展览会:引领数字城市安全与智能未来

随着科技的不断进步,数字城市已经成为未来城市发展的重要趋势。作为数字城市建设的重要组成部分,安防技术的创新与应用对于保障城市安全、提高生活品质具有重要意义。为此,2024杭州国际安防展览会将于4月份在杭州国际博览中心隆重召开&#x…

物联网与智慧景区的未来:机遇与挑战并存

随着科技的不断发展,物联网技术在智慧景区中的应用越来越广泛,为旅游业带来了巨大的变革。然而,在物联网与智慧景区的未来发展中,机遇与挑战并存。本文将探讨物联网与智慧景区面临的机遇和挑战,并提出应对措施&#xf…

最简单的基于 FFmpeg 的 AVfilter 例子(水印叠加)

最简单的基于 FFmpeg 的 AVfilter 例子(水印叠加) 最简单的基于 SDL2 的音频播放器正文工程文件下载 参考雷霄骅博士的文章,链接:最简单的基于FFmpeg的AVfilter例子(水印叠加) 最简单的基于 SDL2 的音频播…

BridgeTower:融合视觉和文本信息的多层语义信息,主打复杂视觉-语言任务

BridgeTower 核心思想子问题1:双塔架构的局限性子问题2:不同层次的语义信息未被充分利用子问题3:模型扩展性和泛化能力 核心思想 论文:https://arxiv.org/pdf/2206.08657.pdf 代码:https://github.com/microsoft/Bri…

背景样式de七七八八

一,简介 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 1.1背景颜色(background-color) background-color:transparent/color; 默认值为transparent(透明的&#xff…

LeetCode18. 四数之和

18. 四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复)&#xff…

SpringCloud-微服务概述、SpringCloud入门概述、服务提供与消费

1.学习前言 1.1 学习前提 熟练使用SpringBoot 微服务快速开发框架了解过Dubbo Zookeeper 分布式基础电脑配置内存不低于8G 1.2 文章大纲 Spring Cloud 五大组件 服务注册与发现——Netflix Eureka负载均衡: ​ 客户端负载均衡——Netflix Ribbon ​ 服务端负载…

5.0 HDFS 集群服务建立教程

HDFS 集群是建立在 Hadoop 集群之上的,由于 HDFS 是 Hadoop 最主要的守护进程,所以 HDFS 集群的配置过程是 Hadoop 集群配置过程的代表。 使用 Docker 可以更加方便地、高效地构建出一个集群环境。 每台计算机中的配置 Hadoop 如何配置集群、不同的计…