LeetCode每日一题 009 两数相加
2019-03-06 23:46
330 查看
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
1、解题思路
链表表示整数逆序存储,每个节点只存储一位数组,因此只需同时顺序遍历两个链表,按位相加并向前进位 即可得到相加后的值。需注意进位值,及链表可能不等长,以及最后可能的进位值得存储。
2、边界用例
1)【2】【9, 9,9】
3、有效题解
[code]struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { if (NULL == l1 || NULL == l2) { return (NULL == l1) ? l2 : l1; } struct ListNode *list = NULL; struct ListNode *pNode; struct ListNode *preNode = NULL; int base = 0; while (NULL != l1 && NULL != l2) { pNode = (struct ListNode *)calloc(1, sizeof(struct ListNode)); assert(NULL != pNode); base += l1->val + l2->val; pNode->val = base % 10; base = base / 10; pNode->next = NULL; if (NULL != preNode) { preNode->next = pNode; } preNode = pNode; if (NULL == list) { list = pNode; } l1 = l1->next; l2 = l2->next; } struct ListNode *tmpNode = (NULL == l1) ? l2 : l1; while (NULL != tmpNode) { pNode = (struct ListNode *)calloc(1, sizeof(struct ListNode)); assert(NULL != pNode); base += tmpNode->val; pNode->val = base % 10; base = base / 10; pNode->next = NULL; if (NULL != preNode) { preNode->next = pNode; } preNode = pNode; tmpNode = tmpNode->next; } while (base > 0) { pNode = (struct ListNode *)calloc(1, sizeof(struct ListNode)); assert(NULL != pNode); pNode->val = base % 10; base = base / 10; pNode->next = NULL; if (NULL != preNode) { preNode->next = pNode; } preNode = pNode; } return list; }
4、复杂度分析
遍历链表,时间复杂度o(n),空间复杂度o(1)。
5、小结
1、如果以独立首节点的形式表示链表,注意修改链表元素要使用指针的指针,才会生效;
2、编写循环不要忘记 循环变量更新 及循环退出条件;
相关文章推荐
- Leetcode每日一道 -- 两数相加
- leetcode 2. 两数相加(Java 版)
- LeetCode 2. Add Two Numbers(两数相加)
- [leetcode]两数相加
- leetcode-2-两数相加(add two numbers)-java
- Leetcode(2)两数相加
- LeetCode 第二题两数相加 C语言
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- LeetCode 2 两数相加(链表)
- Leetcode每日一道 -- 两数之和
- LeetCode题目C++实现:2. 两数相加
- LeetCode2. python实现:两数相加问题☆☆
- Leetcode002--单链表两数相加
- 刷LeetCode(1)——两数相加
- [LeetCode]371.Sum of Two Integers两数相加
- 从零打卡leetcode之day 2---两数相加
- Leetcode 653. Two Sum IV - Input is a BST 两数相加4 解题报告
- 【LeetCode】第二题:两数相加
- leetcode 两数相加
- 【LeetCode】- Two Sum(两数相加)