给定一个链表,判断链表中是否有环。(不使用额外空间)
示例:a-b-c-b
思路:
1.快慢指针方法
设置两个指针,快指针每次走两步,慢指针每次走一步,如果是环形的话快指针一定会追上慢指针,等到快指针和慢指针相等的时候,就返回true。否则就返回false
var hasCycle = function(head) { //1.判断不存在的情况 if (!head || head.next) { return false } //2.双指针循环 var fast = head.next var slow = head //2.1快指针每次走两步,慢指针每次走一步,如果快指针一直有值,那就证明是环形,直到两个相等就退出 while(fast && fast.next){ if(fast == slow) { return true } fast = fast.next.next slow = slow.next } //2.2否则,就不是环形 return false };
2.不知道是什么方法
var hasCycle = function(head) { while(head != null){ if(head == head.next){ return true; } if(head.next != null){ head.next = head.next.next; } head = head.next; } return false; };
这种方法会破坏链表结构,不推荐