Leetcode Problem 2: Add Two numbers
2016-02-16 13:22
295 查看
Description
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
这题的意思是用链表表示两个逆序数,将他们相加后输出链表表示逆序的和。
Solution
这题主要考察链表的使用,其实很简单,从低位到高位遍历(链表中表现为从头指针开始向后遍历)。遍历结束的条件是两个链表节点都已经指向NULL。两个链表对应节点位置的数字依次相加,这个时候可能会产生进位。如果产生进位,则存储这个进位并加入到下一次计算中,直到两个链表均遍历完,输出结果。Code
/** * Leetcode problem list 2: add two number. * * * hellfire(asyncloadng#163.com) * Feb 15th, 2016 */ #include<iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; /** * 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 == NULL) { return l2; } if (l2 == NULL) { return l1; } ListNode *p, *l3; p = new ListNode(-1); int carry = 0; l3 = p; while (l1 != NULL || l2 != NULL) { if (l1 != NULL) { carry += l1 -> val; l1 = l1 -> next; } if (l2 != NULL) { carry += l2 -> val; l2 = l2 -> next; } l3 -> next = new ListNode(carry % 10); l3 = l3 -> next; carry = carry / 10; } if (carry == 1) { l3 -> next = new ListNode(1); } return p -> next; } }; int main(int argc, char **argv) { /////// Test case. /////// Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) /////// Output: 7 -> 0 -> 8 Solution s; ListNode *l1, *l2, *l3; l1 = new ListNode(5); l2 = new ListNode(5); l3 = s.addTwoNumbers(l1, l2); cout << l3 -> val << endl; }
源代码对应的Github地址:https://github.com/oj-problem/leetcode/blob/master/solution2.cpp
备注
测试用例:[0] [0] -> [0]
[1] [0] -> [1]
[1] [1] -> [2]
[5] [5] -> [1][0]
相关文章推荐
- 160216编程日常
- 四、单件模式--创建型模式
- JPA criteria 查询:类型安全与面向对象
- Android小技巧
- 什么是经验
- csdn多少分可以看到排名!
- POJ 1195 Mobile phones
- Spring使用Cache
- NSTimer用法总结
- 怎样实现iMindMap中分支格式的更换
- TalkingData:移动互联网报告:媒体篇
- HDU 1556 Color the ball
- Linux 命令学习之df and du
- build docker镜像时发送到deamo的内容过大问题
- delphi中Message消息的使用方法
- Java描述贪心算法解决背包问题
- 无限循环背景ParallaxNode
- Android 图片缓存之内存缓存技术LruCache,软引用
- js 处理数据里面的空格
- 一个现代化的JSON库Moshi针对Android和Java