Ö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()