LeetCode 2. 两数相加
2019-03-25 19:33
423 查看
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
问题分析
对于创建一个新的链表的情况,先new一个dummy节点,然后new一个cur节点等于dummy。这样dummy节点用来保留链表头部的索引,cur节点用来后面进行链表的创建。两个链表对应位相加,如果有某个节点为空,那么将其值看作是0,然后将两个值加和的值/10,可得到进位值,加和的值%10,可得到当前位的结果。如此进行下去,直到两个节点同时为空。这时再检查进位,如果是1,那么还需在新链表尾部创建一个值为1的节点。
代码实现
[code]/** * 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* dummy = new ListNode(-1); ListNode* cur = dummy; int val1, val2; int carry = 0; while(l1 || l2){ val1 = l1? l1->val : 0; val2 = l2? l2->val : 0; cur->next = new ListNode((val1 + val2 + carry) % 10); cur = cur->next; carry = (val1 + val2 + carry) / 10; if(l1 != NULL) l1 = l1->next; if(l2 != NULL) l2 = l2->next; } if(carry == 1) cur->next = new ListNode(1); return dummy->next; } };
相关文章推荐
- Leetcode 653. Two Sum IV - Input is a BST 两数相加4 解题报告
- [LeetCode] Add Two Numbers 两数相加
- Leetcode(2)两数相加
- LeetCode题目C++实现:2. 两数相加
- leetcode算法题:两数相加(Java实现-效率超过100%提交者)
- leetcode 链表里的两数相加 C++实现
- 从零打卡leetcode之day 2---两数相加
- leetcode 2. 两数相加(Java 版)
- [LeetCode]371.Sum of Two Integers两数相加
- 【LeetCode】2. 两数相加(Add Two Numbers,28.6%,中等)
- [LeetCode] 2. Add Two Numbers 两数相加 @python
- 【LeetCode】第二题:两数相加
- LeetCode刷题记: 两数相加
- LeetCode 2 两数相加 Python
- LeetCode 2. 两数相加
- leetcode 两数相加
- [Leetcode] 2. 两数相加 java
- LeetCode 2 两数相加(链表)
- LeetCode 第二题两数相加 C语言
- leetcode 1 Two sum(两数相加)