Tek Yönlü Bağlı listelerde eleman ekleme işlemlerinin 3 tane formu vardır.

  • Sona eleman Ekleme (Add Last)
  • Başa Eleman Ekleme (Add First)
  • Araya Eleman Ekleme (Add Anywhere)

Eleman ekleme işlemlerinin 3’e ayrılmasının sebebi bağlı listedeki özel durumları kontrol edebilmek amacıyladır. Bağlı listelerde ilk düğüm ve son düğüm özeldir ve bu özelliklere göre eleman ekleme işleminin yapılması gerekmektedir.

Bir bağlı listenin sonuna eleman ekleyebilmek için son düğümü bulmamız gerekir. Son düğümü bulduktan sonra düğümün işaretçisini NULL yerine eklenecek olan düğüm ile birlikte güncellememiz şarttır.

Bir önceki yazımızda Tek Yönlü Bağlı Listelerde Traverse İşlemi konusuna değinmiştik ve traverse işleminin öneminden bahsetmiştik. Herhangi bir konuma işlem yapabilmek için gerekli olan konuma erişmemiz gerekir. Sona eleman ekleme özelinde erişmemiz gereken konum son düğümdür. O halde traverse fonksiyonumuzu güncelleyerek son düğümü bulmamız gerekecektir.

normalde traverse fonksiyomuzda kullandığımız şart while(temp != null) şeklindeydi. Ancak bu şekilde bir döngü kullandığımızda son adımda temp değişkeni NULL olur ve döngüden çıkar. Biz temp değişkenimizin NULL değil, son düğüm olmasını istiyoruz. O halde traverse kodumuzu bu duruma göre güncellememiz gerekecektir.

Tek Yönlü Bağlı Liste Sona Eleman Ekleme C Kodu

İlgili Fonksiyonumuz aşağıdaki gibidir.

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

Dikkat ederseniz while döngüsü içerisindeki şartımız temp->next != null şeklindedir. Bu şekilde güncelleme yaptığımızda, her döngüde, mevcut düğümden sonra gelen düğümün next işaretçisinin kontrolü yapılmış olacaktır. Böylece döngü sonunda temp değişkeni NULL değil, son düğüm olacaktır.

Son düğümü elde ettikten sonra, kendisinden gelen düğümü yeni düğüm olarak güncellemek yeterli olacaktır. Dikkat ederseniz addLast fonksiyonu parametre olarak struct node* değişkeni almaktadır. Bu fonksiyonu nasıl kullandığımıza görmeniz açısından aşağıda tüm kodu paylaşıyorum.

struct node* sonaEklenecekDugum = createNewNode(100);
addLast(sonaEklenecekDugum);

Sona Eleman Ekleme C Kodu Hepsi

#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;
}

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();
    return 0;
}

Bağlı Listelerde Sona Eleman Ekleme Python Kodu

Aşağıda sona eleman ekleme işleminin python hali verilmiştir. Konu anlatımında bütünlüğün sağlanması açısından tüm kodu birlikte paylaşıyorum.

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

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

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

    def traverse_linked(self):
        temp = self.start
        while temp is not None:
            print("\n", temp.data, end="")
            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

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("\n************************\n")
    linked_list.traverse_linked()

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

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