C++力扣2
C++力扣2
1.题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
2. 思路及代码
一开始我固定思维模式,觉得数一定要是
C++力扣2
1.题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
2. 思路及代码
- 一开始我固定思维模式,觉得数一定要是高位到低位的排序模式,再从个位开始取。但是由于是单链表,就算逆置链表以后,到链表最后一个节点,再导数第二个相加的结点也不现实。
- 后来我发现题目还省力了,低位刚好在链表头,所以可以直接从链表头开始遍历,依次取两个数相加,取这个数的个位数,保存进位位,留给下一组相加的数,这就类似于大数阶乘的思想了。
- 容易出错的地方在于两个链表都遍历完后,可能还有一个进位位,因此需要再申请一个新的链表结点,值为1。
c代码如下:
/*** Definition for singly-linked list.* struct Listode {* int val;* Listode *next;* Listode() : val(0), next(nullptr) {}* Listode(int x) : val(x), next(nullptr) {}* Listode(int x, Listode *next) : val(x), next(next) {}* };*/
class Solution {
public:Listode* addTwoumbers(Listode* l1, Listode* l2) {Listode* l=new Listode(0);//最终返回的链表Listode* cur=l;Listode *p1 = l1;Listode *p2 = l2;//链表元素相加int cin = 0;//进位位int sum=0;while(p1||p2){sum=0;if(p1){sum=p1->val;p1=p1->next;}if(p2){sum=p2->val;p2=p2->next;}int res=(sumcin)%10;//取个位数字cin=(sumcin)/10;cur->next= new Listode(res);cur=cur->next;}//最后还有一个进位没加进去if(cin==1){cur->next=new Listode(1);}return l->next;//;l是val为0的头结点,记得返回第一个结点}
};
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2024-01-10 12:12:45
下一篇:探索基于计算机的数字音频工作站
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 大勺哥 | 11分钟前 发表 |
你可以假设除了数字 0 之外,这两个数都不会以 0 开头 | |
本站网友 弯曲体位 | 20分钟前 发表 |
它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字 | |
本站网友 金钱草的功效与作用 | 17分钟前 发表 |
后来我发现题目还省力了,低位刚好在链表头,所以可以直接从链表头开始遍历,依次取两个数相加,取这个数的个位数,保存进位位,留给下一组相加的数,这就类似于大数阶乘的思想了 | |
本站网友 颠覆性错误 | 19分钟前 发表 |
val(x) | |
本站网友 假体隆鼻费用多少钱 | 5分钟前 发表 |
Listode* l2) {Listode* l=new Listode(0);//最终返回的链表Listode* cur=l;Listode *p1 = l1;Listode *p2 = l2;//链表元素相加int cin = 0;//进位位int sum=0;while(p1||p2){sum=0;if(p1){sum=p1->val;p1=p1->next;}if(p2){sum=p2->val;p2=p2->next;}int res=(sumcin)%10;//取个位数字cin=(sumcin)/10;cur->next= new Listode(res);cur=cur->next;}//最后还有一个进位没加进去if(cin==1){cur->next=new Listode(1);}return l->next;//;l是val为0的头结点,记得返回第一个结点} }; | |
本站网友 源程序量 | 10分钟前 发表 |
next(nullptr) {}* Listode(int x | |
本站网友 索骥 | 2分钟前 发表 |
next(nullptr) {}* Listode(int x | |
本站网友 word表格调整 | 13分钟前 发表 |
它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字 | |
本站网友 林君怡 | 8分钟前 发表 |
但是由于是单链表,就算逆置链表以后,到链表最后一个节点,再导数第二个相加的结点也不现实 | |
本站网友 盖括 | 18分钟前 发表 |
Listode* addTwoumbers(Listode* l1 | |
本站网友 母爱好时光 | 16分钟前 发表 |
val(x) | |
本站网友 万家乐 | 13分钟前 发表 |
请你将两个数相加,并以相同形式返回一个表示和的链表 | |
本站网友 北京市大地律师事务所 | 18分钟前 发表 |
next(next) {}* };*/ class Solution { public | |
本站网友 牛蒡的作用 | 20分钟前 发表 |
Listode* l2) {Listode* l=new Listode(0);//最终返回的链表Listode* cur=l;Listode *p1 = l1;Listode *p2 = l2;//链表元素相加int cin = 0;//进位位int sum=0;while(p1||p2){sum=0;if(p1){sum=p1->val;p1=p1->next;}if(p2){sum=p2->val;p2=p2->next;}int res=(sumcin)%10;//取个位数字cin=(sumcin)/10;cur->next= new Listode(res);cur=cur->next;}//最后还有一个进位没加进去if(cin==1){cur->next=new Listode(1);}return l->next;//;l是val为0的头结点,记得返回第一个结点} }; | |
本站网友 卷土重来 | 13分钟前 发表 |
next(next) {}* };*/ class Solution { public | |
本站网友 楼价 | 26分钟前 发表 |
next(nullptr) {}* Listode(int x) | |
本站网友 equinox | 22分钟前 发表 |
C++力扣2 1.题目描述 给你两个 非空 的链表,表示两个非负的整数 | |
本站网友 渝信川菜 | 13分钟前 发表 |
C++力扣2 1.题目描述 给你两个 非空 的链表,表示两个非负的整数 |