摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.htmlQ:给定一个循环链表,实现一个算法返回这个环的开始结点。定义:循环链表:链表中一个结点的指针指向先前已经出现的结点,导致链表中出现环。例子:输入:A -> B -> C -> D -> E -> C [结点C在之前已经出现过]输出:结点C思路:见原作者blog:http://hawstein.com/posts/2.5.htmlCODE: 1 #include 2 #include"lis 阅读全文
posted @ 2014-03-09 13:58 哈士奇.银桑 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.htmlQ:你有两个由单链表表示的数。每个结点代表其中的一位数字。数字的存储是逆序的, 也就是说个位位于链表的表头。写一函数使这两个数相加并返回结果,结果也由链表表示。例子:(3 -> 1 -> 5), (5 -> 9 -> 2)输入:8 -> 0 -> 8思路:注意3点:两链表为空、两链表长度不一样、最后结果有进位。CODE:list.h可以参考CCI——Q2.3客户程序: 1 #include 2 阅读全文
posted @ 2014-03-07 09:01 哈士奇.银桑 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.htmlQ:实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针。例子:输入:指向链表a->b->c->d->e中结点c的指针结果:不需要返回什么,得到一个新链表:a->b->d->e思路:int removeNode(link):将后一个点删除,将后一个节点的数据复制到该点。需要注意节点C是不是头节点,尾节点。Talk is cheap,Show me CODE:接口 lish.h 阅读全文
posted @ 2014-03-06 14:17 哈士奇.银桑 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.htmlQ:实现一个算法从一个单链表中返回倒数第n个元素。思路:findNthRecursion(link):递归的调用单链表的下一个节点,直到到达链表的尾部。此时,开始计数,直到到倒数第nn个数时,返回此时的h,即pp。 缺点是需要定义两个全局变量。link findNthToLast(link,int):定义两个指针p和q,使p和q之间差距n个距离,当p指向NULL时,q就指向了倒数第n个数。Talk is... 阅读全文
posted @ 2014-03-05 15:16 哈士奇.银桑 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html一.Q:从一个未排序的链表中移除重复的项进一步地,如果不允许使用临时的缓存,你如何解决这个问题?思路:removedulicate():额外开一Boolen数组dulicate[N]存放链表中的数据,遍历链表,将链表的item对应的数组中的元素设为真。如果某元素在数组中为真,证明它前面出现过,删除即可。缺点:链表的item类型为int型时,1,可能为负值;2,浪费空间。removeDulicate():双层循环遍历链表,重复即删 阅读全文
posted @ 2014-03-04 10:51 哈士奇.银桑 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html一.Q:假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串。 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码。旋转字符串:"waterbottle"是"erbottlewat"的旋转字符串。思路:将字符串s1+s1,再判断s2是不是s1+s1的子串,如果是,s2就是s1的旋转字符串。eg:s1:abcd 阅读全文
posted @ 2014-03-03 08:37 哈士奇.银桑 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html一.Q:写一个函数处理一个N×M的矩阵,如果矩阵中某个元素为0,那么把它所在的行和列都置为0.思路:额外申请两个数组row[N],col[M],如果元素s[i][j]等于0,那么row[i]和col[j]都等于0,最后重新遍历数组,将行列对应的元素设为0.CODE: 1 #include 2 #include 3 #define N 4 4 #define M 4 5 void zero(int s[][M] ) 6 阅读全文
posted @ 2014-03-02 16:44 哈士奇.银桑 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章当作编程笔记:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html一.Q: 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)思路:见:http://hawstein.com/posts/1.6.htmlCODE: 1 #include 2 #define N 4 3 #define exch(A,B) {int t=A;A=B;B=t;} 4 void transpose(int s[][N]) 5 { 6 .. 阅读全文
posted @ 2014-03-01 08:56 哈士奇.银桑 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html一.Q:写一个函数,把字符串中所有的空格替换为%20 。思路:int *replace1(char[],int):首先计算字符串中的空格的数量,新字符串的长度应该是多2cnt数量的长度(每个空格替换为%20需要增加2个字符,x个空格增加2x个字符)。申请一个额外数组,将原数组复制到新数组即可。replace2(char[],int):如果原数组长度够大,可以从后向前将字符串复制到原数组中。CODE: 1 #include 2 #includ 阅读全文
posted @ 2014-02-28 09:20 哈士奇.银桑 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 本文参考该作者文章:作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html一.Q:写一个函数判断两个字符串是否是变位词。(变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说, abbcd和abcdb就是一对变位词。)思路:isAnagrm(char*,char*):先将两字符串进行插入排序,再比较两字符串是否相等。isAnagrm2(char*,char*):由于组成变位词的字符是一模一样的, 因此我们可以先统计每个字符串中各个字符出现的次数, 然后看这两个字符串中各字符出现次数是否 阅读全文
posted @ 2014-02-27 14:56 哈士奇.银桑 阅读(215) 评论(0) 推荐(0) 编辑