Linked List Cycle

head berilgan, bog'langan ro'yxatning head holda, bog'langan ro'yxatda tsikl bor yoki yo'qligini aniqlang.

Agar roʻyxatda keyingi koʻrsatkichni doimiy ravishda kuzatib borish orqali yana yetib borish mumkin boʻlgan tugun boʻlsa, bogʻlangan roʻyxatda tsikl mavjud. Ichkarida pos dumining keyingi koʻrsatkichi bogʻlangan tugun indeksini belgilash uchun ishlatiladi.

Eʼtibor bering, pos parametr sifatida oʻtkazilmaydi.

Agar bog'langan ro'yxatda sikl bo'lsa, true qiymatini qaytaring. Aks holda, false qaytaring.

Example 1:

Linked List Cycle

Input: head = [3,2,0,-4], pos = 1 Output: true Explanation: Bog'langan ro'yxatda tail 1-tugunga (0-indekslangan) ulanadigan tsikl mavjud.

Example 2:

Linked List Cycle

Input: head = [1,2], pos = 0 Output: true Explanation: Bog'langan ro'yxatda tail 0-tugunga (0-indekslangan) ulanadigan tsikl mavjud.

Example 3:

Linked List Cycle

Input: head = [1], pos = -1 Output: false Explanation: Bog'langan ro'yxatda tsikl mavjud emas.

Constraints:

  • Ro'yxatdagi tugunlar soni [0, 104] oralig'ida.

  • -105 <= Node.val <= 105

  • Bog'langan ro'yxatdagi pos -1 yoki valid indeks.

Follow up: O(1) (ya'ni doimiy) xotiradan foydalanib, uni hal qila olasizmi?

My Solution

func hasCycle(head *ListNode) bool {
    slow, fast := head, head
    
    for fast != nil && fast.Next != nil {
        fast = fast.Next.Next
        slow = slow.Next
        
        if fast == slow {
            return true
        }
    }
    
    return false
}

© Leetcode link

Last updated

Was this helpful?