2. Add Two Numbers
来源:互联网 发布:睿博数据技术有限公司 编辑:程序博客网 时间:2024/05/18 00:37
题目:
You are given two linked lists representing two non-negative numbers.
The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
题目分析:
1、看题目第一感觉,这难道不就是加法运算吗?为什么是Medium,好吧,自己给自己心理安慰。
2、边界情况,万一有为空的呢。
2、倒序的方法挺简单的,适合从低位开始运算,注意进位就可以。而且只要不是两个链表都到尾节点就一直向后。
思路:
1、两个指针分别指向两个链表,向后依次同时移动一位
2、注意进位,我采用了一个标识符,用来获取是否上一次运算存在进位
3、我的最后一位的处理方式与其他人不一样,单独处理
代码:
/** * 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) { if (l1 == nullptr) return l2; if (l2 == nullptr) return l1; int flag = 0, val; ListNode* head = new ListNode(0); ListNode* phead = head; while (l1 != nullptr || l2 != nullptr) { ListNode* p = new ListNode(0); head->next = p; head = p; val = (l1 != nullptr ? l1->val : 0) + (l2 != nullptr ? l2->val : 0) + flag; val >= 10 ? val = val % 10, flag = 1 : flag = 0; head->val = val; l1 = (l1 == nullptr) ? l1 : l1->next; l2 = (l2 == nullptr) ? l2 : l2->next; } if (flag == 1) { ListNode* p = new ListNode(1); head->next = p; } return phead->next; }};
0 0
- 2.Add Two Numbers
- 2.Add Two Numbers
- 2.Add Two Numbers
- 2.Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2.Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- 2.Add Two Numbers
- 2. Add Two Numbers
- 2. Add Two Numbers
- Codeforces #375(Div.2)B.Text Document Analysis【模拟】水题
- Android编译环境搭建-ubuntu虚拟机
- hdu5538 House Building 数学 国庆咸鱼
- JAVA连接数据库的方法
- Android中的事件分发传递机制
- 2. Add Two Numbers
- 决策树算法原理与实现(一)
- HDU Sequence I 2016中国大学生程序设计竞赛(长春)-重现赛
- 打印二维数组的新方法
- Hadoop 2.x完全分布式安装
- ubuntu16.04安装Oracle JDK
- C/C++游戏内存修改器
- 从认知到编程(三)
- HDU#1008:Elevator