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