
剑指offer
kookie29
这个作者很懒,什么都没留下…
展开
-
面试题:两个链表的第一个公共结点
题目描述: 输入两个链表,求他们的第一个公共结点。 (图中内容不是测试用例的数字) 第一种思路描述:首先遍历两个链表,得到其长度gap接着,让较长的链表先走gap步两个链表同时走,此时找到的第一个公共结点就是所需结点时间复杂度O(m+n) 代码实现://此处借用了链表的头文件//获取链表长度int GetListLength(SListNode* list){...原创 2018-04-06 23:54:37 · 200 阅读 · 0 评论 -
面试题:第一次只出现一次的字符
题目描述:在字符串中找到第1个只出现一次的字符。如输入“abaccdeff”,则输出‘b’.思路(1):从头开始扫描字符串中的字符,并与后面的字符比较,若未发现相同的字符,则该字符为第一次出现的字符,打印之时间复杂度为O(n*n),故不推荐该种做法! 思路(2):哈希表,从头扫描字符串两次,第一次扫描时,每扫描到一个字符就将哈希表的对应项中次数加1.第二次扫描时,每扫描到一个字符就可从哈希表...原创 2018-04-02 20:45:37 · 265 阅读 · 0 评论 -
面试题:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头打印链表。 本篇博客共介绍两种方式(c++代码):方法1:递归方式 假设要求不改变链表的结构。 这种方式想必大家都可以想到的,借助链表的头文件(SList.h),此处不再粘贴代码。 https://blog.youkuaiyun.com/kai29/article/details/78966034//递归方式void PrintTailToFrontR...原创 2018-04-01 13:29:54 · 441 阅读 · 0 评论 -
面试题:反转链表
面试题:反转链表思路:要实现链表反转,需要调整链表中指针方向,使链表反转后的头结点为原链表的尾结点。为了防止结点断裂,需定义三个指针,分别指向当前遍历的结点,它的前一结点以及后一个结点。 当然编写代码时要考虑到下列三点(防止程序崩溃):链表为空链表只有一个结点链表有多个结点将思路用代码实现为SListNode* node=pHead; //当前结点SListNod...原创 2018-04-04 19:59:21 · 246 阅读 · 0 评论 -
笔记2
函数重载:同一类中,函数参数不同(类型,顺序不同),返回值可同可不同,virtual关键字可有可无。void Func(int x,int y);void Func(double x,double y);该函数被c编译器编译后库中名字为_Func,c++编译器编译后 产生 _Func_int_int,_Func_double_double标识符,以便程序调用相应函数。如果...原创 2018-04-05 12:07:13 · 149 阅读 · 0 评论 -
面试题:合并两个有序链表
题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍递增排序。 思路如下:如果list1为空,直接返回list2;若list2为空,返回list1;二者均不为空,比较两个链表的头结点,若list1小于list2,则list1的头结点为合并后的链表的头结点(反之),以此类推·,直到两个链表遍历完毕。测试用例:输入链表有多个结点,结点值互不相同或存在多个相同...原创 2018-04-04 21:54:09 · 523 阅读 · 1 评论