(算法)环形链表

54 阅读1分钟

判断链表是否成环

给定一个链表,判断链表中是否有环。

示例:

输入:[3,2,0,4] 输出:true
解释:链表中存在一个环

image.png

题解:

/** 
* @param {ListNode} head
* @return {boolean} 
*/
const hasCycle = (head) => {
    while(head){
        if(head.flag) return true;
        
        head.flag = true;
        head = head.next
    }
    return false
}

规则:

立 flag 等重新回到 flag 处则存在环

定位环的起点

给定一个链表,返回链表开始入环的第一个结点。 如果链表无环,则返回 null。

示例:

示例 1:
输入:head = [3,2,0,-4](如上图) 
输出:结点2
解释:链表中有一个环,其尾部连接到第二个结点。

示例 2:  
输入:head = [1,2] 
输出:结点1
解释:链表中有一个环,其尾部连接到第一个结点。

示例 3:  
输入:head = [1]
输出:null 
解释:链表中没有环。

题解:

/** 
* @param {ListNode} head
* @return {boolean} 
*/
const hasCycle = (head) => {
    while(head){
        if(head.flag) return head;
        
        head.flag = true;
        head = head.next
    }
    return null
}

规则:

立 flag 等重新回到 flag 处返回此结点