Leetcode445 两数相加||(单链表)
两数相加模板:
//n进制数相加int carry=0;
int bit;
int 数1,数2;
point1指向数1的最低位,point2指向数2的最低位
res;//结果
while(point1不到最高位&&point2不到最高位)
{bit=point1->val +point2->val+carry;if(bit>=n){carry=1;结果最后加入数(bit-n);}else{carry=0;结果最后加入数(bit);}
}
while(point1不到最高位)
{bit= point1->val+carry;if(bit>=n){carry=1;结果加入数(bit-n);}else{carry=0;结果加入数(bit);}
}
while(point2不到最高位)
{bit=point2->val+carry;if(bit>=n){carry=1;结果加入数(bit-10);}else{carry=0;结果加入数(bit);}
}
//如果到最后还有进位没加
if(carry==1)
{结果加入数(1);
}
return 结果;}
};
具体思路:
(1)用存放节点类型的栈来实现从低位向高位的遍历
(2)用头插法实现向结果串中添加位数
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<ListNode*>st1;
stack<ListNode*>st2;
ListNode *head=new ListNode();
ListNode *p=l1;
while(p)
{st1.push(p);p=p->next;
}
p=l2;
while(p)
{st2.push(p);p=p->next;
}
ListNode *p1,*p2,*s;
int carry=0;
int bit;
while(!st1.empty()&&!st2.empty())
{p1=st1.top();st1.pop();p2=st2.top();st2.pop();bit=p1->val+p2->val+carry;if(bit>=10){carry=1;s=new ListNode(bit-10);s->next=head->next;head->next=s;}else{carry=0;s=new ListNode(bit);s->next=head->next;head->next=s;}
}
while(!st1.empty())
{p1=st1.top();st1.pop();bit=p1->val+carry;if(bit>=10){carry=1;s=new ListNode(bit-10);s->next=head->next;head->next=s;}else{carry=0;s=new ListNode(bit);s->next=head->next;head->next=s;}
}
while(!st2.empty())
{p2=st2.top();st2.pop();bit=p2->val+carry;if(bit>=10){carry=1;s=new ListNode(bit-10);s->next=head->next;head->next=s;}else{carry=0;s=new ListNode(bit);s->next=head->next;head->next=s;}
}
if(carry==1)
{s=new ListNode(1);s->next=head->next;head->next=s;
}
return head->next;}
};
Leetcode445 两数相加||(单链表)相关推荐
- leetcode-445. 两数相加 II
给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进阶: 如 ...
- leetcode445. 两数相加 II
给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进阶: 如 ...
- 【LeetCode 2】两数相加(链表)
给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 0 ...
- 力扣刷题-单链表两数相加
分区:链表 2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表 ...
- LeetCode 2 两数相加(链表)
题目要求: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入 ...
- python 链表两数相加
| 两数相加 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设 ...
- 链表相加 2. 两数相加
2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
- LeetCode 445. 两数相加 II(链表大数加法)
1. 题目 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进 ...
- [链表遍历|模拟] leetcode 2 两数相加
[链表遍历|模拟] leetcode 2 两数相加 1.题目 题目链接 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果 ...
最新文章
- 友元程序集(C# 和 Visual Basic)
- windows 2003下snort安装
- openCV视频处理与图像转换
- biweb wms门户网站php开源建站系统 v5.8.3,BIWEB WMS PHP开源企业建站系统 v5.8.5
- lunix下的redis数据库操作——list列表
- Flex4之皮肤定制
- asp.net怎么实现按条件查询_Display Posts : 按条件显示WordPress文章的最强插件
- sql server 配置管理器里为什么是32位_Windows Server2012 配置打印服务器图文教程
- html背景设置为彩色,CSS3 彩色网格背景
- 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
- 初识java atomic
- Android四大组件之 --- Service入门
- 基于vue3.0全家桶H5模板
- 深度linux 1050ti,Archlinux安装NVIDIA1050Ti显卡驱动
- poj 3626 Mud Puddles
- 运维工程师 主要是做什么的?
- IM即时通讯需要解决的问题
- mysql篇-sql查询语句-平均分、最高最低分、排序
- 渗透测试实用浏览器插件推荐
- 稳压二极管和普通二极管的区别