Add Two Numbers 链表相加
2014-08-29 22:21
429 查看
题目:
点击打开链接
解答:
首先找出较长的那个链表 存结果。
然后先相加公共部分,再相加非公共部分。
如果两个链表长度相等,或者是链表最后有进位,那么结果链表的最后节点已经到达尾节点,需要重新寻找到最后一个元素。
代码:
点击打开链接
解答:
首先找出较长的那个链表 存结果。
然后先相加公共部分,再相加非公共部分。
如果两个链表长度相等,或者是链表最后有进位,那么结果链表的最后节点已经到达尾节点,需要重新寻找到最后一个元素。
代码:
class Solution { public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { int len1 = 0, len2 = 0; ListNode *temp = l1; while (temp) { ++len1; temp = temp->next; } temp = l2; while (temp) { ++len2; temp = temp->next; } //较长的链表存结果 ListNode *result = len1 > len2 ? l1 : l2; ListNode *res = result; int sum = 0, carry = 0; while (l1 && l2) { sum = carry + l1->val + l2->val; res->val = sum % 10; carry = sum / 10; l1 = l1->next; l2 = l2->next; res = res->next; } //如果l1不为空 if (l1) { while (l1) { sum = l1->val + carry; res->val = sum % 10; carry = sum / 10; l1 = l1->next; res = res->next; } } //如果l2不为空 else if (l2) { while (l2) { sum = l2->val + carry; res->val = sum % 10; carry = sum / 10; l2 = l2->next; res = res->next; } } //如果两个链表长度相等 或者 相加完两个不相等的链表之后还有进位 if (carry != 0) { res = result; //重新找到最后一个节点 while (res->next) { res = res->next; } ListNode *node = new ListNode(carry); res->next = node; } return result; } };
相关文章推荐
- 大整数相加链表实现(Add Two Numbers)
- [Leetcode #2]Add Two Numbers 链表存储的两个正数相加
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
- leetcode 5. 两个链表逐个元素相加 Add Two Numbers
- LeetCode 2 : Add Two Numbers ---- 单链表相加
- 【LeetCode】链表相加 Add Two Numbers - Easy ++
- LeetCode OJ:Add Two Numbers (相加链表之数)
- Add Two Numbers Leetcode 链表相加
- c++-add two numbers 两个链表相加
- add-two-numbers(单链表相加)
- 2. Add Two Numbers(2个链表相加)
- JavaShowAlgorithm-Add Two Numbers 链表数相加
- LeetCode | Add Two Numbers(两个链表相加)
- 两个链表的数字相加(简单题) add two numbers
- LeetCode-2. Add Two Numbers(链表实现数字相加)
- 2.Add Two Numbers(medium)[链表处理 大数相加]
- LeetCode-Add Two Numbers-链表数字相加-链表操作+加法进位
- (leetcode)2. 两个链表相加Add Two Numbers--Java
- [LeetCode]2. Add Two Numbers用链表逆序存储的两个数相加