社区
数据结构与算法
帖子详情
我面试时遇到的一道题
whoamami
2004-01-29 09:22:23
题目如下:
struct _list{
struct _list *next;
};
给定以上的数据定义,请写一个过程,判断链表中是否有环路。
int CheckCycle(struct _list *list)
{
//请在此填上你的代码
}
我觉得很奇怪,如果在结构定义中增加一个成员,表示是否被访问过,则此题十分简单,且函数效率也很高;现在恐怕必须借助其它数据结构了,而且效率很低下。难道我的理解有问题?请各位大侠指点。
...全文
50
12
打赏
收藏
我面试时遇到的一道题
题目如下: struct _list{ struct _list *next; }; 给定以上的数据定义,请写一个过程,判断链表中是否有环路。 int CheckCycle(struct _list *list) { //请在此填上你的代码 } 我觉得很奇怪,如果在结构定义中增加一个成员,表示是否被访问过,则此题十分简单,且函数效率也很高;现在恐怕必须借助其它数据结构了,而且效率很低下。难道我的理解有问题?请各位大侠指点。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gnefuil
2004-01-29
打赏
举报
回复
很久以前微创出过这题,我还是听同学说的
不知道现在又是哪个公司把这题拿出来唬人了
gnefuil
2004-01-29
打赏
举报
回复
很简单,用两个指针,以不同的步长在里面走,如果有环路这两个指针一定会相遇的
如果没有环路,步长长的那个指针一定会先结束,所以两者不会相遇
这样时间复杂度为O(n),空间复杂度为O(1)
pacman2000
2004-01-29
打赏
举报
回复
对于链表的节点,总是要从头节点开始往后访问一遍的。就是把访问过的节点地址记下来。所以没有什么巧妙的办法。
whoamami
2004-01-29
打赏
举报
回复
两位说得有道理;但我总是怀疑是不是有“巧妙”的解法?
goodsong
2004-01-29
打赏
举报
回复
链表中有环路等价于链表中没有空指针,但这个不能用来判断
还等价于有两个指针(包括传入的参数指针)指向同一个节点(值相等)
我们可以用这个条件来判断
效率等于插入排序的效率
不知道用哈西表来做怎样,忘了哈西表的定义了
frankzch
2004-01-29
打赏
举报
回复
你的想法没有错,但是不符合出题目人的意思,他已经给定了数据结构,所以你不能用改变数据结构的方法来完成这个题目;可以使用你认为“效率低下”的其他方法
gnefuil
2004-01-29
打赏
举报
回复
如果x和y是输入的变量,而且是一步一步走的
那么复杂度就应该是O((x+y)*n)
gnefuil
2004-01-29
打赏
举报
回复
时间复杂度一定是O(n)的
证明:
设两个指针的步长为x和y, x不等于y
如果把走x步,和走y步分别算作一次操作的话
设每个指针从开始到相遇所需要的操作的个数为k
那么就是如下一个同余方程
k*x=k*y (mod n) k>=1
显然当k=n的时候上面的式子一定成立
因此每个指针所需要的操作的个数至多为n
如果x步和y步是一步一步走的,那么所需要走的步数是x*n+y*n步
如果x步和y步是一次完成的,那么只需要2*n次操作
因此时间复杂度为O(n)
whoamami
2004-01-29
打赏
举报
回复
明白了,“如果有环路这两个指针一定会相遇的”这句话是对的,因
为可能在环路上转了不止一圈之后,两个指针才相遇。时间复杂度应
该和步长的选择有关,应该如何选择呢?
whoamami
2004-01-29
打赏
举报
回复
to mysword(一怒拔剑)
“如果有环路这两个指针一定会相遇的”,这句话不对吧?
我自己画了个有环路的链表,不同步长的两个指针在移动,结果并
没有相遇。
sevencat
2004-01-29
打赏
举报
回复
这条题目正常的解法不难,但面试人员会逐渐加上各种限制,最后一般人肯定会被难倒。是一条老的命试题目了。
goodsong
2004-01-29
打赏
举报
回复
to mysword(一怒拔剑)
不错
以不同的步长在里面走
一个每次移一步,一个每次移两步
如果移两步得指针为空,无环
如果两个指针相等,有环
又学了一招
逻辑思维200
题
.part1(笔试或
面试
时
相信大家都
遇到
过逻辑
题
吧)(附答案)
逻辑思维200
题
.part1(笔试或
面试
时
相信大家都
遇到
过逻辑
题
吧)(附答案),我的同学就是因为
一道
逻辑
题
止步心仪的公司,我也是因为
一道
逻辑
题
笔试都不理想,我的资源分一般都在10分,由于资源过大,分为两部分,每部分5分,...
逻辑思维200
题
.part2(笔试或
面试
时
相信大家都有
遇到
过吧)(附答案)
逻辑思维200
题
(笔试或
面试
时
相信大家都有
遇到
过吧)(附答案),我的同学就是因为
一道
逻辑
题
而止步心仪的公司,我也因为逻辑
题
连笔试都不理想,机会是给有准备的人的!我的资源一般在10分,由于这个资源过大,分两部分,每部分...
leetcode
题
库-Technical-interview:技术
面试
每日记录:每日知识点积累总结学习,记录自己的进步...以
面试
题
来驱动学习
(每周十道前端大厂
面试
题
,并收集大家在大厂
面试
中
遇到
的难
题
,一起共同成长。) (技术
面试
必备基础知识、Leetcode
题
解) (前端早读课的姊妹篇,每天一个前端知识点,苦练前端真功夫) (每日一
题
(开开森森学...
面试
时
遇见算法
题
该怎么办?
每周
一道
算法
题
,提升自己的...先聊聊,为什么要写这个每周算法
题
系列,后面写算法
题
的
时
候再说说
面试
时
遇见算法
题
时
的解
题
思路 为什么写这个系列 LeetCode的
题
库,现在共有1020道
题
,把easy与hard难度的
题
目去掉...
面试
的
一道
经典大
题
下图的电路是我在一次
面试
的
时
候
遇到
的,后来发现很多同行在
面试
的
时
候都有
遇到
过这个
题
,我仔细分析了这个电路,给了两种方法。 方法一:头铁硬算 以上电路,我们首先不做任何近似或者忽略不计的处理,严格按照每...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章