Add Two Number
2016-02-16 16:04
260 查看
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
题目难度中等,主要要考虑进位处理
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
/**
*类似于归并排序中的两数组合并,这里要考虑每个value为个位数字
*最终可能有剩余的进位要处理
**/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode * result = new ListNode(0);
ListNode * it=result;
int remain = 0;
while (l1!=NULL&&l2!=NULL) {
handle(it,l1->val,l2->val,remain);
l1 = l1->next;
l2 = l2->next;
}
while (l1!=NULL) {
handle2(it,l1->val,remain);
l1 = l1->next;
}
while (l2!=NULL) {
handle2(it,l2->val,remain);
l2 = l2->next;
}
if (remain)
{
it->next = new ListNode(remain);
}
return result->next;
}
void handle(ListNode *& it,int v1,int v2,int & remain) {
int digital = (v1+v2+remain)%10;
remain = (v1+v2+remain)/10;
it->next = new ListNode(digital);
it = it->next;
}
void handle2(ListNode *& it,int v,int & remain)
{
int digital = (v+remain)%10;
remain = (v+remain)/10;
it->next = new ListNode(digital);
it = it->next;
}
};
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
题目难度中等,主要要考虑进位处理
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
/**
*类似于归并排序中的两数组合并,这里要考虑每个value为个位数字
*最终可能有剩余的进位要处理
**/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode * result = new ListNode(0);
ListNode * it=result;
int remain = 0;
while (l1!=NULL&&l2!=NULL) {
handle(it,l1->val,l2->val,remain);
l1 = l1->next;
l2 = l2->next;
}
while (l1!=NULL) {
handle2(it,l1->val,remain);
l1 = l1->next;
}
while (l2!=NULL) {
handle2(it,l2->val,remain);
l2 = l2->next;
}
if (remain)
{
it->next = new ListNode(remain);
}
return result->next;
}
void handle(ListNode *& it,int v1,int v2,int & remain) {
int digital = (v1+v2+remain)%10;
remain = (v1+v2+remain)/10;
it->next = new ListNode(digital);
it = it->next;
}
void handle2(ListNode *& it,int v,int & remain)
{
int digital = (v+remain)%10;
remain = (v+remain)/10;
it->next = new ListNode(digital);
it = it->next;
}
};
相关文章推荐
- Educational Codeforces Round 6 620C Pearls in a Row
- nodejs中cluster使用
- linux type
- 我需要把数据库的数据以图表的形式(饼状,线状,柱状)显示出来,不知道django下面有没有比较好用的一些插件工具或者自带的类等等
- Android JNI打印信息
- Zabbix与微信报警
- C#中重载与重写区别分析
- php扩展开发
- 压力测试的思路和方法小结
- SQL中char、varchar、nchar、nvarchar 详解
- getWritableDatabase()和getReadableDatabase()方法区别
- android wifi子系统
- 我的Android app开发生涯
- IOC学习
- iOS特殊操作--持续更新
- java获取路径问题
- ebcgl新增上级组
- Java-day03面向对象
- 收录一些常用的面试题目
- windows调试:验尸模式调试