Bağlı listede döngü (cycle) olup olmadığını nasıl tespit edersiniz?

Cevap

1. Hash set ile

Ziyaret edilen düğümler bir kümeye eklenir; aynı düğüme tekrar gelinirse döngü vardır. Zaman O(n), bellek O(n).

2. Floyd'un tavşan ve kaplumbağa algoritması

İki işaretçi kullanılır: slow her adımda 1, fast 2 düğüm ilerler. Döngü yoksa fast listenin sonuna (None) ulaşır. Döngü varsa fast döngü içinde slow'a her adımda 1 düğüm yaklaşır ve mutlaka yakalar.

class ListNode:
    def __init__(self, val, next=None):
        self.val, self.next = val, next

def has_cycle(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow is fast:
            return True
    return False

Zaman O(n), bellek `O(1)`.

Takip sorusu: döngünün başlangıç düğümü

Buluşmadan sonra işaretçilerden biri head'e alınır; ikisi de birer adım ilerletilir. Tekrar buluştukları düğüm döngünün başlangıcıdır.

def cycle_start(head):
    slow = fast = head
    while fast and fast.next:
        slow, fast = slow.next, fast.next.next
        if slow is fast:
            slow = head
            while slow is not fast:
                slow, fast = slow.next, fast.next
            return slow
    return None

Neden: başlangıca uzaklık a, döngü uzunluğu c ise buluşma noktasından döngü başına uzaklık da a mod c olur.

Aynı teknik "listenin ortasını bul" ve "dizide tekrar eden sayıyı bul" (LeetCode 287) sorularında da kullanılır.

  1. Binary search'ün zaman karmaşıklığı nedir ve neden?KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  2. Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  3. Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  4. Tek yönlü bağlı listeyi ters çevirin.OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  5. BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  6. get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.ZorAlgoritmalar & Veri YapılarıYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle