挑战编程题(三)
2016-01-04 23:02
218 查看
接 挑战编程题(二)/article/5263768.html
题目:
有两个非负数的链表,每个链表都反序的存储一个多位数字的每一位,(例如:链表2->4->3 数字342),现在求两个链表数字的相加,求和的链表。
例如: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
//函数
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
}
解答:这道题不难主要是考察“单链表“的相关操作。
解题思想,就是单链表每个位置相加,如果每位和大约等于10,向前一位进一,依次类推;
如下:
[align=left]ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {[/align]
[align=left] ListNode *result=NULL;[/align]
[align=left] ListNode *l=result;[/align]
[align=left] int carry =0; //进位值[/align]
[align=left] [/align]
[align=left] while (l1 && l2){[/align]
[align=left] int val=0;[/align]
[align=left] int tempVal= l1->val + l2->val + carry;[/align]
[align=left] if (tempVal>=10){[/align]
[align=left] val=tempVal-10;[/align]
[align=left] carry=1;[/align]
[align=left] }[/align]
[align=left] else{[/align]
[align=left] val=tempVal;[/align]
[align=left] carry=0;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=val;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] if(!l){[/align]
[align=left] l=l3;[/align]
[align=left] result=l;[/align]
[align=left] } else{[/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] l1=l1->next;[/align]
[align=left] l2=l2->next;[/align]
[align=left] }[/align]
[align=left] //对l1链表剩余项处理[/align]
[align=left] while(l1){[/align]
[align=left] int val=0;[/align]
[align=left] int tempVal= l1->val + carry;[/align]
[align=left] if (tempVal>=10){[/align]
[align=left] val=tempVal-10;[/align]
[align=left] carry=1;[/align]
[align=left] }[/align]
[align=left] else{[/align]
[align=left] val=tempVal;[/align]
[align=left] carry=0;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=val;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] if(!l){[/align]
[align=left] l=l3;[/align]
[align=left] } else{[/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] l1=l1->next;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //对l2链表剩余项处理[/align]
[align=left] while(l2){[/align]
[align=left] int val=0;[/align]
[align=left] int tempVal= l2->val + carry;[/align]
[align=left] if (tempVal>=10){[/align]
[align=left] val=tempVal-10;[/align]
[align=left] carry=1;[/align]
[align=left] }[/align]
[align=left] else{[/align]
[align=left] val=tempVal;[/align]
[align=left] carry=0;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=val;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] if(!l){[/align]
[align=left] l=l3;[/align]
[align=left] } else{[/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] l2=l2->next;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //对还存在的进位处理[/align]
[align=left] if (carry)[/align]
[align=left] {[/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=carry;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] [/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] return result;[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]运行结果如下图所示:(完整源码下载地址:http://download.csdn.net/detail/cq20151207/9389996)[/align]
[align=left] [/align]
[align=left]很久没有用C++的单链表了,平时用php数组实现的很多东西,这次通过这道题,让我有重新回顾了一下单链表的使用;[/align]
[align=left]关于单链表的使用,我整理了一下,大家可以参考下:/article/5263770.html[/align]
[align=left] [/align]
[align=left]今天的题目[/align]
[align=left][/align]
[align=left]3.给定一个字符串,获得最长且不重复的字符的子串的长度。例如,“abcabcbb” 的最长子串而不必重复字母是“abc”,它的长度是3为“bbbbb”最长子串而不必重复字母是 “b”,它的长度是1。[/align]
[align=left] [/align]
[align=left] int lengthOfLongestSubstring(string s) {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]如有问题,欢迎和我联系。 我的邮箱 cq20151207@163.com [/align]
题目:
有两个非负数的链表,每个链表都反序的存储一个多位数字的每一位,(例如:链表2->4->3 数字342),现在求两个链表数字的相加,求和的链表。
例如: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
//函数
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
}
解答:这道题不难主要是考察“单链表“的相关操作。
解题思想,就是单链表每个位置相加,如果每位和大约等于10,向前一位进一,依次类推;
如下:
[align=left]ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {[/align]
[align=left] ListNode *result=NULL;[/align]
[align=left] ListNode *l=result;[/align]
[align=left] int carry =0; //进位值[/align]
[align=left] [/align]
[align=left] while (l1 && l2){[/align]
[align=left] int val=0;[/align]
[align=left] int tempVal= l1->val + l2->val + carry;[/align]
[align=left] if (tempVal>=10){[/align]
[align=left] val=tempVal-10;[/align]
[align=left] carry=1;[/align]
[align=left] }[/align]
[align=left] else{[/align]
[align=left] val=tempVal;[/align]
[align=left] carry=0;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=val;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] if(!l){[/align]
[align=left] l=l3;[/align]
[align=left] result=l;[/align]
[align=left] } else{[/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] l1=l1->next;[/align]
[align=left] l2=l2->next;[/align]
[align=left] }[/align]
[align=left] //对l1链表剩余项处理[/align]
[align=left] while(l1){[/align]
[align=left] int val=0;[/align]
[align=left] int tempVal= l1->val + carry;[/align]
[align=left] if (tempVal>=10){[/align]
[align=left] val=tempVal-10;[/align]
[align=left] carry=1;[/align]
[align=left] }[/align]
[align=left] else{[/align]
[align=left] val=tempVal;[/align]
[align=left] carry=0;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=val;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] if(!l){[/align]
[align=left] l=l3;[/align]
[align=left] } else{[/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] l1=l1->next;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //对l2链表剩余项处理[/align]
[align=left] while(l2){[/align]
[align=left] int val=0;[/align]
[align=left] int tempVal= l2->val + carry;[/align]
[align=left] if (tempVal>=10){[/align]
[align=left] val=tempVal-10;[/align]
[align=left] carry=1;[/align]
[align=left] }[/align]
[align=left] else{[/align]
[align=left] val=tempVal;[/align]
[align=left] carry=0;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=val;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] if(!l){[/align]
[align=left] l=l3;[/align]
[align=left] } else{[/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] l2=l2->next;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //对还存在的进位处理[/align]
[align=left] if (carry)[/align]
[align=left] {[/align]
[align=left] ListNode *l3=(ListNode *)malloc([/align]
[align=left] sizeof(ListNode));[/align]
[align=left] l3->val=carry;[/align]
[align=left] l3->next = NULL;[/align]
[align=left] [/align]
[align=left] l->next=l3;[/align]
[align=left] l=l->next;[/align]
[align=left] }[/align]
[align=left] return result;[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]运行结果如下图所示:(完整源码下载地址:http://download.csdn.net/detail/cq20151207/9389996)[/align]
[align=left] [/align]
[align=left]很久没有用C++的单链表了,平时用php数组实现的很多东西,这次通过这道题,让我有重新回顾了一下单链表的使用;[/align]
[align=left]关于单链表的使用,我整理了一下,大家可以参考下:/article/5263770.html[/align]
[align=left] [/align]
[align=left]今天的题目[/align]
[align=left][/align]
[align=left]3.给定一个字符串,获得最长且不重复的字符的子串的长度。例如,“abcabcbb” 的最长子串而不必重复字母是“abc”,它的长度是3为“bbbbb”最长子串而不必重复字母是 “b”,它的长度是1。[/align]
[align=left] [/align]
[align=left] int lengthOfLongestSubstring(string s) {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]如有问题,欢迎和我联系。 我的邮箱 cq20151207@163.com [/align]
相关文章推荐
- Java中通过Selenium WebDriver定位iframe中的元素
- JAVA多线程机制之死锁
- Java学习----不该初始化的class(抽象类)
- python中if __name__==’__main__’的作用
- 彻底搞定C语言指针详解-完整版-时候初学者-必备
- 使用MyEclipse构建MAVEN项目
- C#调用c++dll时,关于回调函数
- 判断链表是否回文?
- 一起talk C栗子吧(第九十回:C语言实例--使用管道进行进程间通信三)
- QTextStream读取坐标
- windows下pip安装python模块时报错总结
- python 代码片段21
- JAVA学习笔记之JMenuBar
- 深入java虚拟机(二)
- C++继承方式
- c++回调函数 callback
- Java IO Basic
- 3. 【创建与销毁对象】用同步、静态内部类和枚举类型强化单例模式
- java中的泛型
- 跟我学习dubbo-简介(1)