リンクリスト・サイクル


リンクリストはhead , and nodes.value.next プロパティ.次のプロパティは、次のノードに接続されています.next プロパティ.
// a linked list object with a head and node children
const linkedList = { head: {
                            next: {
                                    val: 1,
                                    next: {
                                            val: 2,
                                            next: null  
                                           }
                                   }
                           }   
                    }

このleetcode問題はリンクされたリストのノードのいずれかがリストの前のノードに接続しているかどうかを調べます.
関数への引数はリンクリストの値です.[1,2,3,4] そして、例えば、サイクルが存在する位置1 これはリンクリストが最終ノードの後の位置インデックス1のノードに戻ることを意味する.- 1を通過するとサイクルがない.

const hasCycle = (head) => {
    let seen = []

    while(head !== null){

        if(seen.includes(head)){ // use includes method of array equivalent of contains to hashset in java
            return true
        }else{
            seen.push(head)
        }
        head = head.next
    }
    return false
};

このソリューションでは、リンクリストを横断している間、以前のノードに戻るかどうかを確認します.
配列の助けを借りてノードを格納します.
let seen = []
//...
// and when visiting them
//...
seen.push(head)
我々は、単にリンクされたリストとリセット頭を横切るためにwhileループを使いますhead.next ループの最後に.これにより、次の反復処理の次のノードを訪問できます.
while(head !== null){
//... 
// condition checks
//... 
head = head.next
} 
その後、.includes arrayメソッドを使用して、現在のノードを既に参照しているかどうかを確認しますseen 配列.
if(seen.includes(head)){ 
            return true
}else{
            seen.push(head)
}
最後に、もし見つけたらhead は既にseen 返される配列true 返り値false そうでなければデフォルトで.
上または上に到達する歓迎以上の感じ!