关于javascript的一道面试题
问题描述
忘记当时问的啥了,因为聊的比较多,记性不好.大概是'如何判断链是否有环'只依稀记得这个意思...谢谢各位帮我把问题纠正下.我主要想知道问的是什么.
问题解答
回答1:这个问的有点厉害
var a = { val: ’a’}, b = { val: ’b’}, c = { val: ’c’}; a.next = b;b.next = c; c.next = a;
a.next 是 bb.next 是 cc.next 是 a..... .....
如果执行以下循环
var temp = a; while(tamp){ temp = temp.next; }
那么将会是个死循环,temp会被如下赋值: a => b => c => a => b ..... 这样的 abc 就是构成了一个环
你可以参考一下循环队列,环链表。
那么到底要如何判断呢?既然他说要我判断,按照上面的做法。
递归
function isCircle(list, head){ // 默认值 head = head || list; if (list.next === head){ // 相等 console.log(’是循环的’); return true; } else if (!list.next) { // 下一个? 不存在的 console.log(’不是循环的’);return false; } else {// 继续递归 return isCircle(list.next, head); }}ScreenShot
(写完发现写错又重写... = = 抱歉了)
回答2:这道题目是一个非常经典的算法题,最经典的做法是使用 快慢指针法 ,具体题目可以移步 leetcode
简单来说,定义快指针和慢指针,快的一次走两步,慢的一次走一步,如果他们两个能相遇,则说明有环。
var hasCycle = function(head) { if(!head) return false; var faster = head; var slower = head; while (faster && faster.next) {faster = faster.next.next;slower = slower.next;if (slower === faster) return true; } return false;};
相关文章:
1. css3 - Typecho 后台部分表单按钮在 Chrome 下出现灵异动画问题,求解决2. apache - 想把之前写的单机版 windows 软件改成网络版,让每个用户可以注册并登录。类似 qq 的登陆,怎么架设服务器呢?3. java - 阿里的开发手册中为什么禁用map来作为查询的接受类?4. 创建mysqli对象与数据库连接 - 出错5. 用Html5怎么实现简单选择排序?6. node.js - win7下,npm 无法下载依赖包,淘宝镜像也装不上,求帮忙???7. mysql 的datadir设置的文件夹不存在,启动了mysql服务后创建的数据库存在哪里?8. mysql 使用group_concat后 顺序改变是怎么回事?9. python - uwsgi+django的搭建问题10. php多任务倒计时求助
