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相关推荐

  1. [Leetcode] 445. Add Two Numbers II

    问题: https://leetcode.com/problems/add-two-numbers-ii/#/description 思路:该题与"415. Add Strings" ...

  2. 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 ...

  3. LeetCode之Add Two Numbers

    LeetCode之Add Two Numbers 题目:You are given two linked lists representing two non-negative numbers. Th ...

  4. 【注意】LeetCode 2. Add Two Numbers

    LeetCode 2. Add Two Numbers 这种沙比提怎么都写不对了??? Solution1:学习这种写法 /*** Definition for singly-linked list. ...

  5. LeetCode Add Two Numbers II(栈)

    问题:给出两个链表表示的整数,求其和 思路:因为链表的第一个结点是最高位,最后一个结点是最低位.先将两个链表放入两个栈中.然后从两个栈中取出元素,从低到高位相加. 具体代码参考: https://gi ...

  6. LeetCode 题解之Add Two Numbers II

    1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 1 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 2 ...

  7. LeetCode:2. Add Two Numbers

    https://leetcode.com/problems/add-two-numbers/description/ 内容描述 You are given two non-empty linked l ...

  8. LeetCode 2. Add Two Numbers

    题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...

  9. leetcode 【 Add Two Numbers 】 python 实现

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

最新文章

  1. hdu 1495 非常可乐(BFS)
  2. 《每日一题》62. Unique Paths 不同路径
  3. Atomic Integer 原理分析-getAndAddInt
  4. 机器学习:如何在安卓上集成TensorFlow
  5. java 更新订单状态_Java 8状态更新
  6. JavaScript文档对象模型获取body元素对象和获取Html元素对象(3)
  7. 001 Joiner
  8. JT/T-1078流媒体服务优化升级
  9. 一个“蝇量级” C 语言协程库 -- Protothreads
  10. SNN综述(1):深度脉冲神经网络
  11. (231)Verilog HDL:减法器
  12. AdGuard常规设置的介绍
  13. python 3.5 urllib
  14. 关于Facebook发币,FB元老级员工们有话说
  15. 我那迷途知返的小羊-linux修复DNS解析问题
  16. 使用map方式获取iris请求中的json请求数据
  17. 前端培训机构哪家强?
  18. 十几减9的口算题_一年级数学口算题:十几减9(可下载)
  19. 从零开始搭建K8S--搭建K8S Ingress
  20. SCN – What, why, and how?

热门文章

  1. 如何使用TreeView控件
  2. 【OpenCV】IplImage和char *的相互转换,以及极易忽视的细节
  3. 仿射解密c语言程序实验报告,仿射加密解密 - 依姆哣特的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 使用mysql事务管理_MySQL事务管理的介绍(附示例)
  5. 两台服务器身份验证,OAuth 2 从入门到精通(一) - 身份认证服务器
  6. mask rcnn 召回率_搜索推荐召回amp;amp;粗排相关性优化最新进展—2020
  7. 局域网视频共享 php,window_Windows 7媒体库管理音视频文件实现局域网共享, 任务分析 多台电脑连接的家 - phpStudy...
  8. html的各种基本标签 fylong,HTML:text标签不工作
  9. linux cadence快捷键,如何设置Cadence 16.6中PCB Editor的快捷键
  10. 在C ++中将String转换为Integer并将Integer转换为String