Çift Yönlü Bağlı Liste - İleri ve Geri Gitme
Her node hem önceki (prev) hem de sonraki (next) node'a işaretçi tutar. Bu sayede listede iki yönlü hareket edebiliriz.
class DoublyNode:
"""Çift yönlü bağlı liste düğümü"""
def __init__(self, data):
self.data = data
self.prev = None # Önceki node
self.next = None # Sonraki node
class DoublyLinkedList:
"""Çift Yönlü Bağlı Liste"""
def __init__(self):
self.head = None
self.tail = None
self.size = 0
def append(self, data):
"""Sona ekle - O(1)"""
new_node = DoublyNode(data)
if not self.head:
self.head = self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.size += 1
print(f"✅ Sona eklendi: {data}")
def prepend(self, data):
"""Başa ekle - O(1)"""
new_node = DoublyNode(data)
if not self.head:
self.head = self.tail = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
self.size += 1
print(f"✅ Başa eklendi: {data}")
def delete_node(self, node):
"""Belirli node'u sil - O(1)"""
if not node:
return
# Önceki node'un next'ini güncelle
if node.prev:
node.prev.next = node.next
else:
self.head = node.next # Silinen head ise
# Sonraki node'un prev'ini güncelle
if node.next:
node.next.prev = node.prev
else:
self.tail = node.prev # Silinen tail ise
self.size -= 1
print(f"🗑️ Silindi: {node.data}")
def pop_back(self):
"""Sondan sil - O(1) 🎉"""
if not self.tail:
print("❌ Liste boş!")
return None
data = self.tail.data
self.delete_node(self.tail)
return data
def pop_front(self):
"""Baştan sil - O(1)"""
if not self.head:
print("❌ Liste boş!")
return None
data = self.head.data
self.delete_node(self.head)
return data
def display_forward(self):
"""İleri doğru göster"""
if not self.head:
print("Liste: [BOŞ]")
return
elements = []
current = self.head
while current:
elements.append(str(current.data))
current = current.next
print(f"İleri → : NULL ← {' ⟷ '.join(elements)} → NULL")
def display_backward(self):
"""Geri doğru göster"""
if not self.tail:
print("Liste: [BOŞ]")
return
elements = []
current = self.tail
while current:
elements.append(str(current.data))
current = current.prev
print(f"Geri ← : {' ⟷ '.join(elements)}")
# Test
print("↔️ Doubly Linked List Demo\n")
dll = DoublyLinkedList()
dll.append(10)
dll.append(20)
dll.append(30)
dll.display_forward()
print()
dll.prepend(5)
dll.display_forward()
dll.display_backward()
print()
print("🎉 Sondan silme O(1):")
dll.pop_back()
dll.display_forward()
print()
print("🎉 Baştan silme O(1):")
dll.pop_front()
dll.display_forward()
İleri/Geri butonları
Önceki/Sonraki şarkı
Undo/Redo işlemleri
En az kullanılan önbellek