Önceki yazımızda tek yönlü bağlı listelerde sona eleman ekleme konusunu görmüştük. Bu yazımızda ise başa eleman ekleme işleminden bahsedeceğiz.

Başa eleman ekleme işlemi özel bir durumdur. Çünkü tek yönlü bağlı listelerde start düğümü yani ilk düğüm özel olarak tutulur ki bu değişken üzerinden bağlı listeye erişim sağlayabilelim.

O halde başa eleman ekleme işlemi esasında başlangıç düğümünün güncellenmesi anlamına gelmektedir. Başlangıç düğümü güncellendikten sonra diğer bir önemli durumda, bir önceki durumda ilk düğüm olan düğümün işaret edilmesi gerektiğidir. Yani artık yeni “ilk düğüm” eski ilk düğümü işaret etmelidir.

Tek Yönlü Bağlı Listelerde Başa Eleman Ekleme C Kodu

Aşağıda ilgili fonksiyon paylaşılmıştır.

void addFirst(struct node* toBeFirst)
{
    struct node* oldFirst = start;
    start = toBeFirst;
    toBeFirst->next = oldFirst;
}

Koddanda görebileceğiniz üzere ilk başta mevcut başlangıç düğümünü oldFirst değişkeninde sakladık. Daha sonra start düğümünü yeni düğümle güncelledik ve daha sonra başlangıç düğümünün işaretçisini “eski ilk düğüm” yani oldFirst’i işaret edecek şekilde yapılandırdık.

Kod Bütünlüğünü bozmamak adına aşağıda tüm kodu paylaşıyorum.

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

struct node {
    int data;
    struct node* next;
};

struct node* start = NULL;

struct node* createNewNode(int data) {
    struct node* newNode = (struct node*)malloc(sizeof(struct node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void traverseLinked()
{
    struct node* temp = start;
    while(temp != NULL)
    {
        printf("\n%d", temp->data);
        temp = temp->next;
    }
}

void addLast(struct node* toBeLast)
{
    struct node* temp = start;
    while(temp->next != NULL)
    {
       temp = temp->next;
    }
    temp->next = toBeLast;
}

void addFirst(struct node* toBeFirst)
{
    struct node* oldFirst = start;
    start = toBeFirst;
    toBeFirst->next = oldFirst;
}

int main() {
    struct node* baslangicDugumu = createNewNode(5);
    struct node* ikinciDugum = createNewNode(10);
    struct node* ucuncuDugum = createNewNode(15);

    start = baslangicDugumu;
    start->next = ikinciDugum;
    ikinciDugum->next = ucuncuDugum;
    printf("\n************************\n");
    traverseLinked();

    struct node* sonaEklenecekDugum = createNewNode(100);
    addLast(sonaEklenecekDugum);
    printf("\n************************\n");
    traverseLinked();

    struct node* sonaEklenecekDugum2 = createNewNode(200);
    addLast(sonaEklenecekDugum2);
    printf("\n************************\n");
    traverseLinked();

    struct node* basaEklenecek = createNewNode(-200);
    addFirst(basaEklenecek);
    printf("\n************************\n");
    traverseLinked();

    struct node* basaEklenecek2 = createNewNode(-400);
    addFirst(basaEklenecek2);
    printf("\n************************\n");
    traverseLinked();
    return 0;
}

Tek Yönlü Bağlı Listelerde Başa Eleman Ekleme Python Kodu

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.start = None

    def create_new_node(self, data):
        return Node(data)

    def traverse_linked(self):
        temp = self.start
        while temp is not None:
            print(temp.data)
            temp = temp.next

    def add_last(self, to_be_last):
        temp = self.start
        while temp.next is not None:
            temp = temp.next
        temp.next = to_be_last

    def add_first(self, to_be_first):
        old_first = self.start
        self.start = to_be_first
        to_be_first.next = old_first

if __name__ == "__main__":
    linked_list = LinkedList()

    baslangic_dugumu = linked_list.create_new_node(5)
    ikinci_dugum = linked_list.create_new_node(10)
    ucuncu_dugum = linked_list.create_new_node(15)

    linked_list.start = baslangic_dugumu
    linked_list.start.next = ikinci_dugum
    ikinci_dugum.next = ucuncu_dugum
    print("************************")
    linked_list.traverse_linked()

    sona_eklenecek_dugum = linked_list.create_new_node(100)
    linked_list.add_last(sona_eklenecek_dugum)
    print("************************")
    linked_list.traverse_linked()

    sona_eklenecek_dugum2 = linked_list.create_new_node(200)
    linked_list.add_last(sona_eklenecek_dugum2)
    print("************************")
    linked_list.traverse_linked()

    basa_eklenecek = linked_list.create_new_node(-200)
    linked_list.add_first(basa_eklenecek)
    print("************************")
    linked_list.traverse_linked()

    basa_eklenecek2 = linked_list.create_new_node(-400)
    linked_list.add_first(basa_eklenecek2)
    print("************************")
    linked_list.traverse_linked()