CodeBlanks Logo Icon CodeBlanks

Listeye ekleme

  • C kursu
  • Orta seviye
  • Ders 71/116
  • 5 dk

Bağlı listeye eleman eklemeyi öğrenirsin.

Listeye ekleme

Listeye düğüm eklemenin en kolay yolu başa eklemedir (prepend). Yeni düğüm ayrılır, next'i eski başı gösterir ve yeni düğüm yeni baş olur.

İşlev imzası: Node *list_push_front(Node *head, int value). İçeride Node *n = malloc(sizeof(Node)); n->data = value; n->next = head; return n; yazılır. head başlangıçta NULL ise ilk düğüm eklenir; n->next = NULL olur. Bu yöntem O(1) sürede çalışır; listenin sonunu aramak gerekmez. Çağıran taraf yeni başı head = list_push_front(head, 10); biçiminde geri almalıdır.

Geri dönüş değeri ve baş

Başa ekleme, başın değişmesine neden olur. Bu yüzden fonksiyon yeni başı döndürür ve çağıran onu geri alır. Bu, C'deki deyim: işaretçiyi değere göre geçir.

Çağrı: head = list_push_front(head, 20);. Eğer head'i doğrudan fonksiyona gönderip geri almadan kullanırsan, eski başı kullanmaya devam edersin ve yeni düğüm listeden kopuk kalır. Birden çok ekleme zincirleme yapılabilir: önce head = list_push_front(head, 10);, sonra head = list_push_front(head, 20);. Bu, listeyi 20 -> 10 -> NULL biçiminde kurar. Son eklenen her zaman baştadır.

Uygulama İki düğümlü liste

Node *list_push_front(Node *head, int value) fonksiyonunu yaz: malloc(sizeof(Node)) ile ayır, n->data = value;, n->next = head;, return n;. main'de Node *head = NULL; ile başla, önce 10 sonra 20 ekle. printf("%d %d\n", head->data, head->next->data); ile yazdır. Her iki düğümü free ile iade et.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node *next;
} Node;

// list_push_front: başa düğüm ekle, yeni başı döndür
// main: NULL başa 10, sonra 20 ekle; baş ve sonraki data'yı yazdır

int main(void) {
    // buraya yaz
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node *next;
} Node;

Node *list_push_front(Node *head, int value) {
    Node *n = malloc(sizeof(Node));
    n->data = value;
    n->next = head;
    return n;
}

int main(void) {
    Node *head = NULL;
    head = list_push_front(head, 10);
    head = list_push_front(head, 20);
    printf("%d %d\n", head->data, head->next->data);
    free(head->next);
    free(head);
    return 0;
}

Beklenen çıktı

20 10

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yeni düğümün next'i

Soru
n->next = ____;
Cevap
n->next = head;

Açıklama: Yeni düğümün next'i eski başı gösterir.

2 Başa ekleme adımları

Kavram Anlamı
1. adım malloc ile ayır
2. adım data'yı ata
3. adım next = head
4. adım return n

3 list_push_front çağrısından sonra ne yapılmalı?

  • head'i NULL yap
  • free(head) çağır
  • data'yı sil
  • head'i geri al Doğru cevap

Açıklama: head = list_push_front(head, x) ile yeni baş geri alınır.

Orta seviye bölümündeki tüm dersler