当前位置:网站首页>链表相加(二)
链表相加(二)
2022-08-10 21:49:00 【干饭小白】

这题拿到手上,我一直在考虑一个问题就是,能不能通过不预先遍历的方法去做。
呜呜,原谅我的无知,我想不出来。
那就只能先遍历一遍了,反正也是很不影响时间。
一看到这题,就冒出了两种解题方法,第一种是预先通过两个数组把两个链表中的数据保存下来,然后就变成了大数加法了,然后再把结果放到一个新的链表中。
还一种是补充短的链表,然后进行各个位相加,最后考虑进位。等等,好像不可以吧,如果这样的话,进位没办法解决了,毕竟是一个单链表。如果可行,最后还是要借助数组完成进位。
两种方法我都试一下吧!!!
解法1:开始我想着顺着存,这样就可以在统计长度的时候把数据放入数组中.最后发现进位难处理


/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
int *arr1 = new int[1000002]; //用来保存结果
int *arr2 = new int[1000002];
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
//末尾对齐,遍历一遍
int len1 = 0;
int len2 = 0;
ListNode *p1 = head1;
ListNode *p2 = head2;
while(p1 != nullptr)
{
p1 = p1->next;
len1++;
}
while(p2 != nullptr)
{
p2 = p2->next;
len2++;
}
//将各个数位保存到数组中
p1 = head1;
for(int i=len1-1;i>=0;--i)
{
arr1[i] = p1->val;
p1 = p1->next;
}
p2 = head2;
for(int i=len2-1;i>=0;--i)
{
arr2[i] = p2->val;
p2 = p2->next;
}
//各个位相加
int len = len1 > len2 ? len1:len2;
for(int i=0;i<len;++i)
{
arr1[i] = arr1[i] + arr2[i];
arr1[i+1] = arr1[i+1] + arr1[i]/10;
arr1[i] = arr1[i]%10;
}
ListNode *ans = nullptr;
ListNode *p = nullptr;
if(arr1[len] > 0)
{
ListNode *s = new ListNode(arr1[len]);
s->next = nullptr;
ans = s;
p = s;
}
for(int k=len-1;k>=0;k--)
{
ListNode *s = new ListNode(arr1[k]);
s->next = nullptr;
if(ans == nullptr)
{
ans = s;
p = s;
}
else
{
p->next = s;
p = p->next;
}
}
return ans;
}
};这里好像忘记释放数组里的内存了,一个好的习惯,还是建议释放掉
解法2:

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
//末尾对齐,遍历一遍
int len1 = 0;
int len2 = 0;
ListNode *p1 = head1;
ListNode *p2 = head2;
while(p1 != nullptr)
{
p1 = p1->next;
len1++;
}
while(p2 != nullptr)
{
p2 = p2->next;
len2++;
}
if(len1 > len2)
{
for(int i=0;i<len1-len2;++i)
{
ListNode *s = new ListNode(0);
s->next = head2;
head2 = s;
}
}
if(len2 > len1)
{
for(int i=0;i<len2-len1;++i)
{
ListNode *s = new ListNode(0);
s->next = head1;
head1 = s;
}
}
p1 = head1;
p2 = head2;
while(p1 != nullptr)
{
p1->val = p1->val + p2->val;
p1 = p1->next;
p2 = p2->next;
}
int len = len1 > len2 ? len1:len2;
int *arr = new int[len+2];
p1 = head1;
for(int i=len-1;i>=0;--i)
{
arr[i] = p1->val;
// arr[i+1] = arr[i+1] + arr[i]/10;
// arr[i] = arr[i]%10;
p1 = p1->next;
}
for(int i=0;i<len;++i)
{
arr[i+1] = arr[i+1] + arr[i]/10;
arr[i] = arr[i]%10;
}
ListNode *ans = nullptr;
ListNode *p = nullptr;
if(arr[len] > 0)
{
ListNode *s = new ListNode(arr[len]);
s->next = nullptr;
ans = s;
p = s;
}
for(int k=len-1;k>=0;--k)
{
ListNode *s = new ListNode(arr[k]);
s->next = nullptr;
if(ans == nullptr)
{
ans = s;
p = s;
}
else
{
p->next = s;
p = p->next;
}
}
delete []arr;
return ans;
}
};边栏推荐
- Service - DHCP principle and configuration
- Labelme-5.0.1 version edit polygon crash
- QT笔记——用VS + qt 生成dll 和 调用生成的dll
- 2022.8.8 Selected Lectures on Good Topics (Number Theory Field)
- 基于Pix4Dmapper的空间三维模型重建应用——空间分析选址
- ArcMap创建镶嵌数据集、导入栅格图像并修改像元数值显示范围
- 论文解读(g-U-Nets)《Graph U-Nets》
- “数据引擎”开启前装规模量产新赛道,「智协慧同」崭露头角
- 阿里云架构师金云龙:基于云XR平台的视觉计算应用部署
- 国内Gravatar头像的完美替代方案Cravatar
猜你喜欢

LeetCode-36-二叉搜索树与双向链表

H3C S5130 IRF做堆叠

阿里巴巴、蚂蚁集团推出分布式数据库 OceanBase 4.0,单机部署性能超 MySQL

【PCBA scheme design】Bluetooth skipping scheme

Shell 编程--Sed

shell (text printing tool awk)

Live Classroom System 08-Tencent Cloud Object Storage and Course Classification Management

unusual understanding

shell编程之正则表达式与文本处理器

测试4年感觉和1、2年时没什么不同?这和应届生有什么区别?
随机推荐
C#【必备技能篇】Hex文件转bin文件的代码实现
华为路由器旁挂引流实验(使用流策略)
Redis 性能影响 - 异步机制和响应延迟
An article to teach you a quick start and basic explanation of Pytest, be sure to read
黑猫带你学Makefile第12篇:常见Makefile问题汇总
Intelligent scheme design - intelligent rope skipping scheme
关于 DataFrame: 处理时间
Self-organization is a two-way journey between managers and members
MySQL Advanced Commands
Shell编程规范与变量
PPT的两个实用技巧
Service - DNS forward and reverse domain name resolution service
每次打开chrome会跳出What's new
port forwarding
服务——DHCP原理与配置
元宇宙社交应用,靠什么吸引用户「为爱发电」?
阿里云新增三大高性能计算解决方案,助力生命科学行业快速发展
3598. 二叉树遍历(华中科技大学考研机试题)
Live Classroom System 09--Tencent Cloud VOD Management Module (1)
《DevOps围炉夜话》- Pilot - CNCF开源DevOps项目DevStream简介 - feat. PMC成员胡涛