Python İle Linked List

Daha önce C dilini kullanarak linked list işlemleri hakkında yazı serisi yayınlamıştım. Linked list ile ilgili hazırladığım yazılara buradan ulaşabilirsiniz. C dili nesne yönelimli bir dil olmadığı için orada struct yapısını kullanmıştık. Ama artık Python ile çalıştığımıza göre class yapısını kullanarak bu işlemleri gerçekleştirebiliriz. Ayrıca buradaki anlatımı oop destekleyen herhangi bir programlama diline uyarlayarak kullanabilirsiniz.

Başlamadan önce, anlatımın singly linked list üzerinden yapılmış olduğunu hatırlatmak isterim.

Linked List Oluşturma

İlk olarak node’ları türeteceğimiz bir “Node” sınıfı oluşturalım. Bu sınıf, bir data özelliği ve varsayılan değeri none olan bir next özelliği içerecek. Data, node’un değeri; next ise o node’un işeret ettiği bir sonraki node nesnesi olacak.

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

Şimdi, linked list için bu node sınıfından 17 değerini tutan head node’u üretelim.

head = Node(data=17)

Şimdi sırasıyla 6, 9 değerlerini tutan node’lar oluşturup linked list’e ekleyelim.

node2 = Node(data=6)
head.next = node2

node3 = Node(data=9)
head.next.next = node3
Linked List Traversal

Linked list’de, head node’undan başlayıp, node’un “None” olmadğı sürece çalışacak ve next node’una geçecek bir döngü ile gezinme sağlayabiliriz.

temp = head
while temp != None:
    print(temp.data)
    temp = temp.next

Örneğin yukarıdaki oluşturduğumuz linked list için, sırasıyla 17, 6, 9 node’larını gezecek ve ekrana yazdıracaktır.

Linked List Node Ekleme

Aşağıdaki gibi bir linked list’imiz olsun. Bu linked list’in sonuna “4” node’unu ekleyelim.

İlk olarak “Node” sınıfından bir newNode nesnesi oluşturalım. Sonrasında head node’undan başlayarak son node’ ulaşana kadar devam eden bir döngü kurgulayalım. Döngü bittiğinde elimizdeki son node’un next‘ine newNode nesnesini atayalım.

newNode = Node(data=4)
temp = head
while(temp.next != None):
    temp = temp.next

temp.next = newNode
Lİnked List Node Silme

Lİnked list’teki node’u veya node’ları bir çok varyasyon ile silebiliriz. Örneğin ilk node’u silme, son node’u silme, değeri x’e eşit olan node’u silme gibi. Fakat biz sadece aşağıdaki linked list için son node’u yani 18 node’unu silme işlemini gerçekleştireceğiz.

İlk olarak head node’unun son node olup olmadığını kontrol ediyoruz. Eğer head node’u aynı zamanda son node ise head’e None’ı atıyoruz. Head son node değilse, sondan bir önceki node’u bulana kadar devam eden bir döngü oluşturuyoruz. Döngü bittiğinde elimizde olan node’un next değerine None’ı atıyoruz.

temp = head
if(head.next == None):
    head = None
else:
    while(temp.next.next != None):
        temp = temp.next
    temp.next = None

Ve Python kullanarak basit düzeyde linked list işlemlerini gerçekleştirdik.

Ayrıca bu yazı için oluştuduğum repo’ya göz atabilirsiniz: https://github.com/kerem37mert/python-linked-list

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir