C'de Linked List 2 #C11.2

Linked List Node Ekleme

 Bir önceki yazımızda linked list oluÅŸturmayı öğrendik. Bu yazıda linked list'e node(düğüm) ekleme iÅŸlemine deÄŸineceÄŸiz. 

Bir linked list'e düğm eklemenin 3 yöntemi vardır:

  • Linked List'in başına
  • Linked List'in sonuna
  • Linked List'de belirli bir düğümden sonra 

1. Linked List'in Başına Node (düğüm) Ekleme


Eklenen yeni düğüm linked list'in başına eklenir ve yeni eklenen düğüm linked list'in head(başı) olur. Örneğin linked list'in elemanları 1, 2, 3 vardır. Bu linked list'in başına 0'ı eklersek; 0, 1, 2, 3 olur. Liste'nin başına düğüm ekleyen fonksiyon push() olarak adlandıralım. push() fonksiyonu parametre olarak linked list'in head(baş) pointer'ını ve yeni düğüm değerini almalıdır. Çünkü, push() fonksiyonu yeni düğümü head ile değiştirmelidir.


#include <stdio.h>
#include <stdlib.h>
// bir linked list düğümü
struct Node{
int data;
struct Node* next;
};

// bu fonksiyon, verilen düğümden başlayarak linked list'in içeriğini yazdırır
void printList(struct Node* n){
while(n != NULL){
printf(" %d",n->data);
n = n->next;
}
}

void push(struct Node** head_ref,int new_data){
// yeni düğümü allocade etmek
struct Node* new_node = (struct Node*) malloc(sizeof (struct Node));
// yeni deÄŸeri al
new_node->data = new_data;
// yeni düğümü head yapmak
new_node->next = (*head_ref);
// yeni düğüme point etmek için head;
(*head_ref) = new_node;
}

int main() {
struct Node* head = NULL;
struct Node* second = NULL;
struct Node* third = NULL;

// yığında 3 düğüm ayırmak
head = (struct Node*) malloc(sizeof (struct Node));
second = (struct Node*) malloc(sizeof (struct Node));
third =(struct Node*) malloc(sizeof (struct Node));

head->data = 1; // ilk düğüme değer atandı
head->next =second; // ilk düğümü, ikinci düğüme bağladık

second->data = 2; // ikinci düğüme değer atandı
second->next = third; // ikinci düğümü, üçüncü düğüme bağladık

third->data =3; // üçüncü düğüme değer atandı
third->next = NULL;

// fonksiyonu çağıralım
push(&head,0);
printList(head);

return 0;
}

Çıktı:

0 1 2 3

2. Linked List'de Belirli Bir Node(düğüm) Sonra Node(düğüm) Ekleme


Bize bir düğüm için pointer verilir ve yeni düğüm, verilen düğümden sonra eklenir. Ã–rneÄŸin linked list'in elemanları 1, 2, 3 vardır. Linked list'te 2'den sonra 5 deÄŸerini ekleriz ve sonuç 1, 2, 5, 3 olur. Belirli bir düğümden sonra düğüm eklemek için:

  • Ä°lk olarak verilen düğümün NULL olup olmadığı kontrol edilir
  • Yeni düğüm atanır
  • Veriler yeni düğüme atanır
  • Yeni düğümün next'ini sonraki düğüme point etmelidir. Önceki düğümün nexti'i yeni düğüme point etmelidir.


#include <stdio.h>
#include <stdlib.h>
// bir linked list düğümü
struct Node{
int data;
struct Node* next;
};

// bu fonksiyon, verilen düğümden başlayarak linked list'in içeriğini yazdırır
void printList(struct Node* n){
while(n != NULL){
printf(" %d",n->data);
n = n->next;
}
}

// bir düğümden sonra düğüm ekleme
void insertAfter(struct Node* prev_node, int new_data){
// verilen düğüm kontrol edilir
if(prev_node == NULL){
printf("Verilen node NULL olamaz");
return;
}
// yeni düğüm allocate edilir
struct Node* new_node = (struct Node*) malloc(sizeof (struct Node));
// yeni değer alınır
new_node->data=new_data;
// yeni düğümün next'i, önceki düğümün next'i yapılır
new_node->next = prev_node->next;
// önceli düğümün next'i, yeni düğüm yapılır
prev_node->next= new_node;
}
int main() {
struct Node* head = NULL;
struct Node* second = NULL;
struct Node* third = NULL;

// yığında 3 düğüm ayırmak
head = (struct Node*) malloc(sizeof (struct Node));
second = (struct Node*) malloc(sizeof (struct Node));
third =(struct Node*) malloc(sizeof (struct Node));

head->data = 1; // ilk düğüme değer atandı
head->next =second; // ilk düğümü, ikinci düğüme bağladık

second->data = 2; // ikinci düğüme değer atandı
second->next = third; // ikinci düğümü, üçüncü düğüme bağladık

third->data =3; // üçüncü düğüme değer atandı
third->next = NULL;

// fonksiyonu çağıralım
insertAfter(head->next,5);
printList(head);

return 0;
}

Çıktı:

 1 2 5 3

3. Linked List'in Sonuna Node Ekleme


Yeni düğüm, linked list'in sonuna eklenir. Ã–rneÄŸin linked list'in elemanları 1, 2, 3 vardır. Bu linked list'i sonuna 4 ekleriz ve sonuç 1, 2, 3, 4 olur.



#include <stdio.h>
#include <stdlib.h>
// bir linked list düğümü
struct Node{
int data;
struct Node* next;
};

// bu fonksiyon, verilen düğümden başlayarak linked list'in içeriğini yazdırır
void printList(struct Node* n){
while(n != NULL){
printf(" %d",n->data);
n = n->next;
}
}
// sona düğüm eklemek
void append(struct Node** head_ref, int new_data){
// yeni düğüm allocate edilir
struct Node* new_node = (struct Node*) malloc(sizeof (struct Node));
struct Node *last = *head_ref;

// yeni değer alınır
new_node->data = new_data;
// bu düğüm son düğüm olduğu için, next'i NULL yapılır
new_node->next = NULL;
// Eğer linked list boş ise yeni düğüm head yapılır
if(*head_ref == NULL){
*head_ref = new_node;
return;
}
// Linked list boş değilse son düğüme geçiş yapılır
while (last->next != NULL){
last = last->next;
}
// son düğümün next'i yeni düğüm yapılır
last->next = new_node;
return;
}

int main() {
struct Node* head = NULL;
struct Node* second = NULL;
struct Node* third = NULL;

// yığında 3 düğüm ayırmak
head = (struct Node*) malloc(sizeof (struct Node));
second = (struct Node*) malloc(sizeof (struct Node));
third =(struct Node*) malloc(sizeof (struct Node));

head->data = 1; // ilk düğüme değer atandı
head->next =second; // ilk düğümü, ikinci düğüme bağladık

second->data = 2; // ikinci düğüme değer atandı
second->next = third; // ikinci düğümü, üçüncü düğüme bağladık

third->data =3; // üçüncü düğüme değer atandı
third->next = NULL;

// fonksiyonu çağıralım
append(&head,4);
printList(head);

return 0;
}

Çıktı:
 1 2 3 4



C programlama ile ilgili olan diğer konulara aşağıdaki linkten ulaşabilirsiniz:

Kaynaklar
https://www.codesdope.com/blog/article/inserting-a-new-node-in-a-linked-list-in-c/
https://www.geeksforgeeks.org/linked-list-set-2-inserting-a-node/
https://www.programiz.com/dsa/linked-list-operations