LeetCode-2 两数相加 Add Two Numbers
2019-02-25 14:59
435 查看
题目
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解答
我知道,对某个问题想出最佳解法固然难得,然而要将自己的想法解释给他人听懂则更为难得。
按照列竖式相加的思路做。
记录余数carry,初始化为0。
从个位开始逐渐向后加,每次令carry=l1->val+l2->cal+carry。
将carry%10赋给结果的这一位。
并令carry/=10。
要注意以下几种情况
情况 | 举例 |
---|---|
l1或l2为空 | []、[1,2] |
l1与l2长度不等 | [1,2,3]、[4,5] |
l1,l2都加完之后仍有进位 | [1]、[9,9] |
附代码
/* 按照列竖式相加的思路做 记录余数carry,初始化为0 从个位开始逐渐向后加,每次令carry=l1->val+l2->cal+carry; 将carry%10赋给结果的这一位 并令carry/=10 要注意以下几种情况 l1或l2为空 l1与l2长度不等 l1,l2都加完之后仍有进位 */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { //排除l1,l2有为空的情况 if(!l1) return l2; if(!l2) return l1; ListNode King(0);//定义国王(哨兵)结点 ListNode* result=&King;//遍历结果的指针 int carry=0;//保存进位 //两个都没到达结尾的情况 while(l1&&l2) { carry=carry+l1->val+l2->val; result->next=new ListNode(carry%10); result=result->next; carry/=10; l1=l1->next; l2=l2->next; } //l1没到结尾,l2到了 if(l1&&!l2) { while(l1) { carry=carry+l1->val; result->next=new ListNode(carry%10); result=result->next; carry/=10; l1=l1->next; } } //l1到了结尾,l2没到 else if(!l1&&l2) { while(l2) { carry=carry+l2->val; result->next=new ListNode(carry%10); result=result->next; carry/=10; l2=l2->next; } } //两个都到了的情况不用操作 //看是否有没处理的进位; if(carry) result->next=new ListNode(carry); return King.next; } };
相关文章推荐
- LeetCode 2. Add Two Numbers(两数相加)
- [LeetCode] Add Two Numbers 两数相加
- leetcode-2-两数相加(add two numbers)-java
- [LeetCode] 2. Add Two Numbers 两数相加 @python
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- 【LeetCode】2. 两数相加(Add Two Numbers,28.6%,中等)
- [Leetcode]Add Two Numbers 链表实现大数字相加
- LeetCode-Add Two Numbers-链表数字相加-链表操作+加法进位
- [LeetCode]2. Add Two Numbers用链表逆序存储的两个数相加
- LeetCode OJ 之 Add Two Numbers (”两数“相加)
- Add Two Numbers Leetcode 链表相加
- [LeetCode] Add Two Numbers II 两个数字相加之二
- (leetcode)2. 两个链表相加Add Two Numbers--Java
- [Leetcode] Add two numbers 两数之和
- 44.leetCode 2: Add Two Numbers 【两数相加】
- LeetCode Add Two Numbers两个链表数值相加
- leetcode 5. 两个链表逐个元素相加 Add Two Numbers
- LeetCode | Add Two Numbers(两个链表相加)
- Leetcode Add Two Numbers 两个链表表示的数相加
- [Leetcode #2]Add Two Numbers 链表存储的两个正数相加