5 - Bağlı Listeler (Linked Lists)
2026
Bir dizide ortadaki bir konuma yeni bir eleman eklemek istediğinizde ne olur?
Bağlı listeler bu probleme farklı bir yaklaşım sunar:
Veriler ardışık durmak zorunda değildir; düğümler birbirine işaretçilerle bağlanır.
Bu dersin sonunda şunları yapabiliyor olmanız beklenir:
node, head ve next kavramlarını açıklamak| Yapı | Veriler bellekte nasıl durur? | Erişim mantığı |
|---|---|---|
| Dizi | Ardışık | İndeks ile doğrudan |
| Bağlı liste | Dağınık olabilir | Bağlantıları takip ederek |
Bu yapıyı anlamanın ana fikri şudur:
Bağlı listede veriye indeksle değil, bağlantıyı izleyerek ulaşırız.
Bağlı liste, düğümlerin bağlantılarla bir araya geldiği bir veri yapısıdır.
Bir düğüm genellikle iki parçadan oluşur:
next)
Her düğümün:
olduğu veri yapısına bağlı liste denir.

head Ne İşe Yarar?head, listenin ilk düğümünü gösterir.head üzerinden başlar.head == NULL ise liste boştur.Note
Bazı uygulamalarda son düğümü ayrıca göstermek için tail de tutulabilir. Ancak her bağlı listede tail olması zorunlu değildir.
Bağlı listede 5. elemana ulaşmak için:
next alanı takip edilir,Bu yüzden dizi gibi şunu yapamayız:
Çünkü bağlı liste, indeks tabanlı bir yapı değildir.
Burada:
data → saklanan verinext → bir sonraki düğümü gösteren işaretçiSık hata
struct tanımının sonunda ; unutulmamalıdır.
struct node *head = NULL;
struct node *one = NULL;
struct node *two = NULL;
struct node *three = NULL;
one = malloc(sizeof(struct node));
two = malloc(sizeof(struct node));
three = malloc(sizeof(struct node));Note
Gerçek programlarda malloc sonucunun NULL olup olmadığı kontrol edilmelidir.
one->data = 1;
two->data = 2;
three->data = 3;
one->next = two;
two->next = three;
three->next = NULL;
head = one;Okunuşu:
head -> one -> two -> three -> NULL
Bu kodun mantığı:
head’den başlanext ile ilerleNULL görünce durTam dolaşım işlemi, düğümler tek tek ziyaret edildiği için genellikle \(O(n)\) maliyetlidir.
Bağlı listede çoğu zaman verileri taşımayız; bağlantıları değiştiririz.
Başa ekleme mantığı şöyledir:
yeni->next = head yapılırhead = yeni yapılır
Araya ekleme için doğru düğüm bulunduğunda:
yeni->next = onceki->nextonceki->next = yeniBu yüzden bağlı listede asıl maliyet çoğu zaman bağlantıyı kurmak değil, doğru yeri bulmaktır.

| İşlem | Dizi | Tek bağlı liste |
|---|---|---|
i. elemana erişim |
\(O(1)\) | \(O(n)\) |
| Baştan ekleme | \(O(n)\) | \(O(1)\) |
| Baştan silme | \(O(n)\) | \(O(1)\) |
| Sonda ekleme | Uygulamaya göre değişir | tail yoksa \(O(n)\) |
| Arama | \(O(n)\) | \(O(n)\) |
Note
Bu tablo, bağlı listenin neden bazı durumlarda diziye göre daha uygun olduğunu anlamak için önemlidir.
Bağlı listeler yalnızca tek bir biçimde bulunmaz.
NULL yerine tekrar başlangıca bağlanırHer düğüm hem sonraki hem de önceki düğümü bilir.

Avantajı:
Bedeli:
Burada artık her düğüm iki bağlantı bilgisini birlikte taşır:
nextprevBu yapıda son düğüm NULL’ı değil, yeniden ilk düğümü gösterir.

Bu nedenle dolaşımda bitiş koşulu farklı düşünülmelidir.
Doğrusal listede:
Dairesel listede:
Kritik nokta
Bu yüzden “son düğüm her zaman NULL gösterir” ifadesi genel olarak doğru değildir. Bu ifade yalnızca doğrusal listeler için geçerlidir.
malloc ile alınan bellek iş bittikten sonra free edilmelidir.head işaretçisi kaybedilirse listenin geri kalanına erişim kaybolabilir.Sık yapılan hatalar:
struct tanımının sonundaki ; karakterini unutmakmalloc sonrası kontrol yapmamakfree etmeyi unutmakhead üzerinden başlar.liste[4] benzeri doğrudan erişim yapılamaz?tail tutulursa hangi işlemler hızlanabilir?head nasıl güncellenir?