您现在的位置是:首页 > 数码 > 

C++力扣2

2025-07-17 10:53:16
C++力扣2 1.题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 2. 思路及代码 一开始我固定思维模式,觉得数一定要是

C++力扣2

1.题目描述

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

2. 思路及代码

  1. 一开始我固定思维模式,觉得数一定要是高位到低位的排序模式,再从个位开始取。但是由于是单链表,就算逆置链表以后,到链表最后一个节点,再导数第二个相加的结点也不现实。
  2. 后来我发现题目还省力了,低位刚好在链表头,所以可以直接从链表头开始遍历,依次取两个数相加,取这个数的个位数,保存进位位,留给下一组相加的数,这就类似于大数阶乘的思想了。
  3. 容易出错的地方在于两个链表都遍历完后,可能还有一个进位位,因此需要再申请一个新的链表结点,值为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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/794859.html

相关标签:无
上传时间: 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.题目描述 给你两个 非空 的链表,表示两个非负的整数