思路:从前往后遍历链表,将每个节点的next指向自己,然后当遍历到后面有节点的next为自己的话,就说明有环存在,然后我们将对应元素输出就可以。
这种方法的缺点是破坏了当前的链表结构,大家可以根据题意去选择方法。
function detectCycle( head ) { // 链表为空 if(!head) return null; // 判断结束的情况有两种 // 1.当前遍历到的元素指向了自己 说明有环 而且到了环的入口 // 2.不存在环 但到了链表的尾部 while(head.next!==head && head.next !== null){ // 临时保存当前节点的下一个节点 let p = head.next; // 将当前节点的next指向自己 方便我们后面判断有环 head.next = head; // 把指针移到下一个节点 head = p; } // 这里主要判断是由于找到环还是到了链表尾部而导致退出上面循环 if(head.next == head) return head; else return null; }