Elimizde bir linked list olsun. Bu linked list’in başına, sonuna, belli bir değeri barındıran node’dan önce veya sonraya ya da herhangi bir konuma yeni node ekleme işlemi yapabiliriz.
Aşağıdaki gibi bir singly linked listimiz olsun. Sırasıyla bu linked list’in başına 7, sonuna 99 ve “43” değerini barındıran node’un ilerisine 21 değerini içeren yeni node’lar ekleyelim.

Linked List’in Başına Eleman Ekleme
İlk olarak bellekte yer kaplayacak şekilde “malloc” fonksiyonunu kullanarak temp1 değişkeninde node struct’ından yeni bir node oluşturuyoruz. Bu node’un data değerine yukarıda belirttiğimiz 7 değerini, next değerine ise head’ i atıyoruz ve aşağıdaki görseldeki yapıyı elde ediyoruz.

Bu durumda head’in linked list’in ilk elemanı olması gerekirken ikinci elemanı olarak gözükmektedir. Bu durumu düzeltmek için head değerine yeni oluşturduğumuz temp1 node’unu atıyoruz ve linked list’imizin yeni head değerini tayin etmiş oluyoruz. Linked list’imiz görseldeki hale geliyor.

Yaptığımız işlemin kod hali:
struct node *temp1 = (struct node *)malloc(sizeof(struct node));
temp1->data = 7;
temp1->next = head;
head = temp1;
Linked List’in Sonuna Eleman Ekleme
Linked list’imiz en son bir önceki görseldeki hale gelmişti. Şimdi elimizdeki bu linked list’in sonuna daha önce belirttiğimiz “99” değerini içeren yeni bir node ekleyelim.
Malloc fonksiyonu kullanarak yukarıda oluşturduğumuz gibi bu sefer temp2 isminde olan yeni bir node tanımlayalım. Bu node’un data değerine 99, next değerine ise; node, linked list’in son elemanı olacağından NULL değerini atayalım. Ve aşağıdaki görüntü elde etmiş oluyoruz.

Şimdi yapmamız gereken şey, 43 node’unun yani diğer bir deyişle linked list’teki mevcut son node’un yeni oluşturduğumuz 99 node’unu işaret etmesini sağlamak olacak. Peki linked list’teki son node’a nasıl erişim sağlayacağız? Linked list’te traversal yaparken kullandığımız yöntemi kullanarak son node’a erişim sağlayabiliriz. Bu yöntemde temel fikir node NULL olmadığı sürece döngü ile diğer node’a geçmek ve örneğin node’un data değerini ekrana yazdırmak veya herhangi bir işlem yapmaktı. Traversal ile ilgili daha detaylı yazı burada mevcut. Bizim, bu yöntemi biraz revize etmemiz gerekiyor. Nedenini daha iyi anlayabilmek için basit bir traversal yapalım.
tmp isminde bir değişken oluşturalım ve head’i atayalım. tmp NULL mu? Hayır. tmp’ ye tmp’nin next’ini atayalım. tmp NULL mu? Hayır. 43 node’una geldik. tmp’ye tmp’nin next’ini atayalım. tmp NULL mu? Hayır. tmp’ye tmp’nin next’ini atayalım. tmp NULL mu? Evet.
Bu traversel sonucunda elimizde değeri NULL olan bir tmp değişkeni kaldı. Son node’u gezdik fakat tmp, son node’un next’i yani NULL olarak kaldı. Bu durumda kullandığımız yöntemi şu şekilde revize etmeliyiz:
Öncelikle, balangıç değeri head olan bir tmp değişkeni oluşturup bu değişkenin next’inin NULL olup olmadığını kontrol eden bir döngüyle son node’a ulaşmalıyız. Döngü bittiğinde tmp değeri, son node olarak kalacaktır. Ve biz bu son node’un next değerine oluşturmuş olduğumuz temp2 node’unu atayarak işlemi bitirebiliriz.

Yaptığımız işlemin kod hali:
struct node *temp2 = (struct node *)malloc(sizeof(struct node));
temp2->data = 99;
temp2->next= NULL;
struct node *tmp = head;
while(tmp->next != NULL) {
tmp = tmp->next;
}
tmp->next = temp2;
Linked List’in Belli Bir değere sahip Node’un İlerisine Eleman Ekleme
Son durumda elde ettiğimiz linked list’in 43 node’unun ilerisine yeni bir node ekleme işlemini yapalım.
Malloc fonksiyonu ile bellekte yer kaplayacak şekilde temp3 node’unu oluşturalım. Node’un data değerine 21, next değerine ise şimdilik atama yapmayalım. Çünkü ilerisine ekleyeceğimiz 43 node’unun next değerini bilmiyoruz. Ancak o node’a erişebilirsek o node’un next değerini bilebilir ve yeni node’un next’ine o node’un next değerini atama yapabiliriz.

43 node’una erişebilmek için tmp2 isminde bir değişken oluşturup head node’unu atayalım. Sonrasında tmp2’nin data değeri 43 olmadığı sürece çalışacak bir bir döngü oluşturalım. Döngü bittiğinde tmp2’de 43 node’umuz olmuş olacak.
Artık, 43 node’una erişim sağlayabiliyoruz. 43 node’unun next değerini temp3’ün next değerine atayalım. 43 node’unun yani tmp2 node’unun next değerini ise temp3 olarak atayalım. Böylelikle 43 node’unun ilerisine 21 node’unu eklemiş olduk.

Yaptığımız işlemin kod hali:
struct node *temp3 = (struct node *)malloc(sizeof(struct node));
temp1->data = 21;
struct node *tmp2 = head;
while(tmp2->data != 43) {
tmp2 = tmp2->next;
}
temp3->next = tmp2->next;
tmp2->next = temp3;
Bu yazıda, daha birçok varyasyon ile eleman ekleme işlemi yapılabilecek linked list veri yapısına 3 farklı şekilde eleman ekleme işlemini gerçekleştirdik.
teşekürlerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr