您的位置:首页 > 编程语言

挑战编程题(三)

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: