Leetcode445. 链表相加
来源:互联网 发布:java 天气预报接口 编辑:程序博客网 时间:2024/06/07 18:27
Leetcode445. Add Two Numbers II
题目
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7
解题分析
这道题并不是很难,题目要求也是非常清晰,就是对两个链表进行相加,输出相加后链表的结果。而由于是从右往左相加,所以必须先将两个链表遍历到最后一个元素,再分别往前移动,但是很可惜这道题中链表并没有一个指向前面元素的指针,因此就必须得用一种数据结构来存储前面的元素了。
很明显,在这里使用stack是最为明智的选择,栈顶元素就是当前节点对应的值。想到了这一点,接下来问题就简单很多了。只需每次分别取出栈顶元素的值进行相加即可,注意需要进行进位的判断。
进位的判断过程中需要注意有可能出现链表元素全部遍历了但进位不为0的情况,因此在最后还需要对此进行判断,之前没有注意到这种情况,导致wrong answer。把这个细节问题解决了,基本上就没有什么太大的问题了。
源代码
/** * 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) { ListNode* node = NULL; stack<int> stk1, stk2; int carry = 0; while (l1 != NULL) { stk1.push(l1->val); l1 = l1->next; } while (l2 != NULL) { stk2.push(l2->val); l2 = l2->next; } while (!stk1.empty() && !stk2.empty()) { int top1 = stk1.top(), top2 = stk2.top(); stk1.pop(); stk2.pop(); ListNode* temp = new ListNode((top1 + top2 + carry) % 10); carry = (top1 + top2 + carry) / 10; temp->next = node; node = temp; } while (!stk1.empty()) { int top = stk1.top(); stk1.pop(); ListNode* temp = new ListNode((top + carry) % 10); carry = (top + carry) / 10; temp->next = node; node = temp; } while (!stk2.empty()) { int top = stk2.top(); stk2.pop(); ListNode* temp = new ListNode((top + carry) % 10); carry = (top + carry) / 10; temp->next = node; node = temp; } if(carry != 0) { ListNode* temp = new ListNode(carry % 10); temp->next = node; node = temp; } return node; }};
以上是我对这道问题的一些想法,有问题还请在评论区讨论留言~
- Leetcode445. 链表相加
- LeetCode445——Add Two Numbers II(两个链表数据相加(从链表尾部开始),返回新链表)
- leetcode445
- 多项式相加链表
- 两个链表相加
- 两个链表相加
- 两个链表相加
- 链表相加
- 链表相加
- 链表相加
- 链表相加
- 链表相加
- 链表相加
- Java-链表相加
- 两个链表相加
- 链表实现多项式相加
- 链表实现多项式相加
- 两个十字链表相加
- “□” 表情无法在 Android 设备显示? 快试试 EmojiCompact 表情兼容库
- Android 8.0 开发者 FAQ
- Docker之Flanned容器网络不通-yellowcong
- mysql的sql执行计划
- Java 中的 List,Set 和 Map 的区别
- Leetcode445. 链表相加
- The proxy server is refusing connections – Fix for Firefox Browser
- 日期及时间处理包 Carbon 在 Laravel 中的简单使用
- face api协议分析
- POJ 1065 Wooden Sticks 解题报告-用动态规划方法解决(LIS变式)
- CodeForces 873C(贪心)
- SQL优化准则
- C++——选择排序
- 10小时入门大数据-全面掌握Hadoop开发的核心技能