LeetCode#2 Add Two Numbers题解(C++版)
来源:互联网 发布:c语言编Newton 编辑:程序博客网 时间:2024/05/23 01:14
题干
原题网址:
https://leetcode.com/problems/add-two-numbers/description/
题干解析
给你两个非空链表,要你把他们“加”起来,并且返回答案链表。所谓的加就是每对应的两个节点数相加,要注意到的是,答案不能超过10,只有一位数,而如果超过10的话要进位。
知识点
数据结构之链表
难度
中等
解题思路
这道题主要考察对链表的熟悉程度,主要就是对新节点的生成,添加进原链表的操作的训练,其它的注意一下进位的要求。从两个链表的第一节点开始往后加,每到一个新的节点要给答案生成一个新的节点,当某个节点被加完时,要检测另一个节点是否被加完,如果没有,剩下的操作就是将未被加完的链表的节点加入答案中,同样要注意进位。代码里注释得比较清楚,详细解题思路请见代码。
代码
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *ans; // 答案的头指针 bool flag = false; // 标记是否有进位 int sum = l1->val + l2->val; if (sum >= 10) { // 因为都是1位数,所以十位的数要舍去,保留个位数,但是要标记有进位 sum -= 10; flag = true; } ListNode *temp = new ListNode(sum); // 新生成一个节点 ans = temp; // 将该节点赋给头指针 while (l1->next != NULL && l2->next != NULL) { // 如果两个链表都不为空的话 l1 = l1->next; l2 = l2->next; int sum = l1->val + l2->val; if (flag) { // 如果之前有进位 sum++; // 把进位的1加到当前位 flag = false; } if (sum >= 10) { // 如果大于10,要舍去十位数,保留个位数,并标记有进位 sum -= 10; flag = true; } ListNode *next_temp = new ListNode(sum); // 新建一个节点 temp->next = next_temp; // 将该节点插到原链的尾部 temp = next_temp; } if (l1->next != NULL) { // 如果l1还没有加完而l2加完了,接下里要将l1的东西加给答案 while (l1->next != NULL) { l1 = l1->next; int val = l1->val; if (flag) { val++; flag = false; } if (val >= 10) { val -= 10; flag = true; } ListNode *next_temp = new ListNode(val); temp->next = next_temp; temp = next_temp; } } else if (l2->next != NULL) { // 如果l2还没有加完而l1加完了,接下里要将l2的东西加给答案 while (l2->next != NULL) { l2 = l2->next; int val = l2->val; if (flag) { val++; flag = false; } if (val >= 10) { val -= 10; flag = true; } ListNode *next_temp = new ListNode(val); temp->next = next_temp; temp = next_temp; } } if (flag) { // 如果l1和l2都加完了,检查是否还有进位,有的话,还要再加一个值为1的节点。 ListNode *next_temp = new ListNode(1); temp->next = next_temp; temp = next_temp; } return ans; }};
阅读全文
0 0
- LeetCode#2 Add Two Numbers题解(C++版)
- 【leetcode 2】 Add Two Numbers(C++)
- LeetCode题解-2-Add Two Numbers
- LeetCode题解(2)--Add Two Numbers
- LeetCode题解 #2 Add Two Numbers
- LeetCode 题解(26): Add Two Numbers
- LeetCode题解:Add Two Numbers
- LeetCode题解:Add Two Numbers
- [LeetCode] Add Two Numbers题解
- 【leetcode-2】Add Two Numbers(C)
- [C语言][LeetCode][2]Add Two Numbers
- [LeetCode#2][C]Add Two Numbers
- leetcode 2:Add Two Numbers(C语言)
- LeetCode 2. Add Two Numbers(C++)
- [LeetCode] Add Two Numbers(C++)
- leetcode 刷题题解(c++) 2.Add Two Numbers (链表)
- LeetCode题解——2Add Two Numbers
- 《LeetBook》LeetCode题解(2):Add Two Numbers [M]
- 面对前端六年历史代码,如何接入并应用ES6解放开发效率
- Android开发——半边圆角按钮的实现
- bugzilla在使用的过程中有什么问题
- Java整理(五)异常
- linux 测试进程指令 fg bg kill ps jobs ctrl+z ctrl+c
- LeetCode#2 Add Two Numbers题解(C++版)
- unity 扯旋
- Ants
- 指针深入
- ubuntu取消http_proxy设置
- 情绪体验和压力调节
- spice-client源码解析之application.cpp
- 两个数的交换,代码简单,不必观看
- HQL语句的用法