LeetCode 445. Add Two Numbers II
LeetCode 445. Add Two Numbers II
Solution1:我的答案
利用了栈,这样就不用翻转链表了。。。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { //借助两个栈来运算if (l1 == NULL) return l2;else if (l2 == NULL)return l1;int carry = 0;stack<struct ListNode*> List1, List2, res_stack;struct ListNode* temp1 = l1, * temp2 = l2, * res = new ListNode(-1);struct ListNode* temp_res = res;while (temp1 || temp2) {if (temp1) {List1.push(temp1);temp1 = temp1->next;}if (temp2) {List2.push(temp2);temp2 = temp2->next;}}int n1 = 0, n2 = 0;while (!List1.empty() || !List2.empty()) {if (!List1.empty()) {n1 = List1.top()->val;List1.pop();}else if(List1.empty())n1 = 0;if (!List2.empty()) {n2 = List2.top()->val;List2.pop();}else if(List2.empty())n2 = 0;int sum = n1 + n2 + carry;carry = sum/10;res_stack.push(new ListNode(sum%10));}if (carry) res_stack.push(new ListNode(carry));while (!res_stack.empty()) {temp_res->next = res_stack.top();res_stack.pop();//原来stack的pop()操作并没有释放内存,虚惊一场~~~temp_res = temp_res->next;}return res->next;}
};
Solution2:
前半段思路相同,后半段思路要比我的好很多。。。实现的代码也大大优化了。。
参考网址:http://www.cnblogs.com/grandyang/p/6216480.html
思路:
我们首先遍历两个链表,将所有数字分别压入两个栈s1和s2中,我们建立一个值为0的res节点,然后开始循环,如果栈不为空,则将栈顶数字加入sum中,然后将res节点值赋为sum%10,然后新建一个进位节点head,赋值为sum/10,如果没有进位,那么就是0,然后我们head后面连上res,将res指向head,这样循环退出后,我们只要看res的值是否为0,为0返回res->next,不为0则返回res即可,参见代码如下:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {stack<int> s1, s2;while (l1) {s1.push(l1->val);l1 = l1->next;}while (l2) {s2.push(l2->val);l2 = l2->next;}int sum = 0;ListNode *res = new ListNode(0);while (!s1.empty() || !s2.empty()) {if (!s1.empty()) {sum += s1.top(); s1.pop();}if (!s2.empty()) {sum += s2.top(); s2.pop();}res->val = sum % 10;//为当前结点赋值ListNode *head = new ListNode(sum / 10);//以进位值初始化新建的前一个结点,这便于while执行完head->next = res;//后进行判断。新建的结点串在当前结点的前面。res = head; //结点更新,把新建的结点更新为下次循环时的当前结点sum /= 10; //sum保留了此次循环的进位信息,喵喵喵!}return res->val == 0 ? res->next : res;}
};
LeetCode 445. Add Two Numbers II相关推荐
- [Leetcode] 445. Add Two Numbers II
问题: https://leetcode.com/problems/add-two-numbers-ii/#/description 思路:该题与"415. Add Strings" ...
- LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法
题目地址:Add Two Numbers II - LeetCode You are given two non-empty linked lists representing two non-neg ...
- LeetCode之Add Two Numbers
LeetCode之Add Two Numbers 题目:You are given two linked lists representing two non-negative numbers. Th ...
- 【注意】LeetCode 2. Add Two Numbers
LeetCode 2. Add Two Numbers 这种沙比提怎么都写不对了??? Solution1:学习这种写法 /*** Definition for singly-linked list. ...
- LeetCode Add Two Numbers II(栈)
问题:给出两个链表表示的整数,求其和 思路:因为链表的第一个结点是最高位,最后一个结点是最低位.先将两个链表放入两个栈中.然后从两个栈中取出元素,从低到高位相加. 具体代码参考: https://gi ...
- LeetCode 题解之Add Two Numbers II
1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 1 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 2 ...
- LeetCode:2. Add Two Numbers
https://leetcode.com/problems/add-two-numbers/description/ 内容描述 You are given two non-empty linked l ...
- LeetCode 2. Add Two Numbers
题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...
- leetcode 【 Add Two Numbers 】 python 实现
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
最新文章
- hdu 1495 非常可乐(BFS)
- 《每日一题》62. Unique Paths 不同路径
- Atomic Integer 原理分析-getAndAddInt
- 机器学习:如何在安卓上集成TensorFlow
- java 更新订单状态_Java 8状态更新
- JavaScript文档对象模型获取body元素对象和获取Html元素对象(3)
- 001 Joiner
- JT/T-1078流媒体服务优化升级
- 一个“蝇量级” C 语言协程库 -- Protothreads
- SNN综述(1):深度脉冲神经网络
- (231)Verilog HDL:减法器
- AdGuard常规设置的介绍
- python 3.5 urllib
- 关于Facebook发币,FB元老级员工们有话说
- 我那迷途知返的小羊-linux修复DNS解析问题
- 使用map方式获取iris请求中的json请求数据
- 前端培训机构哪家强?
- 十几减9的口算题_一年级数学口算题:十几减9(可下载)
- 从零开始搭建K8S--搭建K8S Ingress
- SCN – What, why, and how?
热门文章
- 如何使用TreeView控件
- 【OpenCV】IplImage和char *的相互转换,以及极易忽视的细节
- 仿射解密c语言程序实验报告,仿射加密解密 - 依姆哣特的个人空间 - OSCHINA - 中文开源技术交流社区...
- 使用mysql事务管理_MySQL事务管理的介绍(附示例)
- 两台服务器身份验证,OAuth 2 从入门到精通(一) - 身份认证服务器
- mask rcnn 召回率_搜索推荐召回amp;amp;粗排相关性优化最新进展—2020
- 局域网视频共享 php,window_Windows 7媒体库管理音视频文件实现局域网共享, 任务分析 多台电脑连接的家 - phpStudy...
- html的各种基本标签 fylong,HTML:text标签不工作
- linux cadence快捷键,如何设置Cadence 16.6中PCB Editor的快捷键
- 在C ++中将String转换为Integer并将Integer转换为String