真题描述:给定一个链表,判断链表中是否有环。
示例 1: 输入:[3,2,0,4](链表结构如下图) 输出:true 解释:链表中存在一个环
插旗法
思路:走一步立一个flag,当有一个flag存在时该链表就有环
/*** @param {ListNode} head* @return {boolean}*/// 入参是头结点const hasCycle = function(head) {// 只要结点存在,那么就继续遍历while(head){// 如果 flag 已经立过了,那么说明环存在if(head.flag){return true;}else{// 如果 flag 没立过,就立一个 flag 再往下走head.flag = true;head = head.next;}}return false;};
快慢指针
/*** @param {ListNode} head* @return {boolean}*/// 入参是头结点const hasCycle = function(head) {let fast = headlet slow = head// 只要结点存在,那么就继续遍历while(fast && fast.next){slow = slow.nextfast = fast.next.nextif(slow == fast) return true;}return false;};
