Jump to content
Üyelik kaydınızı yaparak son yazılan içeriklerden haberdar olun! ×
  • entries
    33
  • comments
    0
  • views
    161,996

Tek Yönlü Bağlı Bir listeye Öğe İşlemleri


Doğuhan ELMA

250 views

Tek yönlü bağlı bir listenin başına bir öğe eklemek, genellikle oldukça hızlı ve basit bir işlemdir. Bu işlem, genellikle O(1) zaman karmaşıklığına sahiptir çünkü başa ekleme işlemi sabit sayıda adımda gerçekleştirilir.

Bağlı listenin başına bir öğe eklemek için aşağıdaki adımlar izlenir:

Yeni Düğüm Oluştur: İlk olarak, listenin başına eklemek istediğiniz değeri içeren yeni bir düğüm oluşturmalısınız.

Yeni Düğümün Referansını Ayarla: Yeni düğümün next referansını, şu anki baş düğüme işaret edecek şekilde ayarlayın.

Baş Düğümü Güncelle: Şimdi baş düğümü, yeni oluşturduğunuz düğüme işaret edecek şekilde güncelleyin. Böylece yeni düğüm, listenin başı olur.

1.png

İşte bir Python kodu örneği:

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

class SinglyLinkedList:
    def __init__(self):
        self.head = None

    def prepend(self, data):
        new_node = Node(data)         # 1. Yeni düğümü oluştur
        new_node.next = self.head     # 2. Yeni düğümün sonrakini şu anki baş düğüm olarak ayarla
        self.head = new_node          # 3. Baş düğümü yeni düğüm olarak güncelle

    def print_list(self):
        # ...
        # ...

Bu örnekte, prepend metodu, verilen veriyi bağlı listenin başına eklemek için kullanılır. Başa ekleme işlemi, tek yönlü bağlı listelerde oldukça yaygın bir işlemdir ve yukarıda açıklanan adımları izler.

Tek yönlü bağlı bir listenin sonuna (tail) bir öğe eklemek de yaygın bir işlemdir. Bu işlem, bağlı listenin sonunda bulunan kuyruk düğümüne erişim gerektirdiğinden, genellikle O(n) zaman karmaşıklığına sahiptir, burada n listenin uzunluğudur.

Bağlı listenin sonuna bir öğe eklemek için aşağıdaki adımlar izlenir:

Yeni Düğüm Oluştur: İlk olarak, listenin sonuna eklemek istediğiniz değeri içeren yeni bir düğüm oluşturun.

Son Düğüme Git: Şu anki baş düğümden başlayarak, son düğüme (sonraki referansı None olan düğüm) kadar ilerleyin.

Son Düğüme Ekle: Son düğümün next referansını yeni oluşturduğunuz düğüme işaret edecek şekilde ayarlayın.

1.png

İşte bir Python kodu örneği:

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

class SinglyLinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data) # 1. Yeni düğümü oluştur
        if not self.head: # Eğer liste boşsa
            self.head = new_node # Yeni düğümü baş düğüm yap
            return
        last_node = self.head
        while last_node.next: # 2. Son düğüme kadar ilerle
            last_node = last_node.next
        last_node.next = new_node # 3. Son düğümün sonrakisine yeni düğümü ata

    def print_list(self):
        # ...
        # ...

Bu örnekte, append metodu, verilen veriyi bağlı listenin sonuna eklemek için kullanılır. Sonuna ekleme işlemi, bu adımları takip eder ve özellikle listenin sonuna eklemeler yapıldığında kullanılır.

Tek yönlü bir bağlı listeden bir öğeyi kaldırmak, belirli bir değere veya belirli bir konuma sahip bir düğümü silmek anlamına gelir. İşte bu işlemi gerçekleştirmek için izlenebilecek adımlar:

Belirli Bir Değere Sahip Düğümü Silme

Silinmek İstenen Düğümü Bul: İlk olarak, silmek istediğiniz değeri içeren düğümü bulmalısınız. Bu, baş düğümden başlayarak listenin sonuna kadar ilerleyerek yapılabilir.

Önceki Düğümü Takip Et: Silmek istediğiniz düğümden bir önceki düğümün referansını takip etmelisiniz, çünkü bu düğümün next referansını güncellemeniz gerekecek.

Bağları Güncelle: Silmek istediğiniz düğümden bir önceki düğümün next referansını, silmek istediğiniz düğümün sonraki düğümüne işaret edecek şekilde güncelleyin.

Düğümü Sil: Artık silmek istediğiniz düğümü güvenli bir şekilde silebilirsiniz.

İşte bir Python kodu örneği:

class SinglyLinkedList:
    # ...
    # ...

    def remove(self, data):
        current_node = self.head

        # Eğer baş düğüm silinecek düğüm ise
        if current_node and current_node.data == data:
            self.head = current_node.next
            current_node = None
            return

        prev_node = None
        while current_node and current_node.data != data:
            prev_node = current_node # Önceki düğümü takip et
            current_node = current_node.next # 1. Silmek istenen düğümü bul

        # Eğer değer listede yoksa
        if current_node is None:
            return

        prev_node.next = current_node.next # 3. Bağları güncelle
        current_node = None # 4. Düğümü sil

Bu remove metodu, verilen bir değere sahip düğümü bağlı listeden siler. İlk düğümün silinip silinmediğini kontrol etmek için ek bir kontrol gerekebilir, çünkü bu durumda baş düğümü güncellemek gerekebilir.

Notlar:

Eğer silmek istediğiniz düğüm baş düğüm ise, baş düğümü silinecek düğümün sonraki düğümüne işaret edecek şekilde güncellemelisiniz.

Eğer silmek istediğiniz değer listede yoksa, uygun bir hata mesajı döndürebilir veya hiçbir şey yapmadan fonksiyondan çıkabilirsiniz.

Silme işlemi genellikle O(n) zaman karmaşıklığına sahiptir, çünkü belirli bir değeri içeren düğümü bulmak için listenin tamamının taranması gerekebilir.

 

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...