この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
100. linked listにcircleあるかのチェック

function hasCircle(head: Node): boolean {
  let fast: Node = head
  let slow: Node = head
  
  while (fast && fast.next) {
    fast = fast.next.next
    slow = slow.next
    
    if (fast === slow) {
      return true
    }
  }
  
  return false
}

この関数では、スローポインタとファストポインタを使ってリストをトラバースします。ファストポインタは2つのノードを移動し、スローポインタは1つだけ動きます。もしファストポインタがリストの末尾に達した場合、もしくはファストポインタがスローポインタを追いついた場合、circleが存在すると言えます。

この関数の時間複雑度はO(n)で、空間複雑度はO(1)です。

空間複雑度がO(1)の解決方法としては、フラグを立てて、リスト内の各ノードを訪問するたびにそれを訪問済みとしてマークする方法があります。しかし、この方法ではリストの長さによっては、大量のメモリが必要になりうるため、あまり効率的ではありません。