บทนำ
Doubly Linked List เป็นโครงสร้างข้อมูลที่แต่ละโหนดมี pointer ชี้ไปทั้งโหนดก่อนหน้า (prev) และโหนดถัดไป (next) ตัวอย่างนี้แสดงการสร้างคลาสพื้นฐานพร้อม append และ display
โค้ดตัวอย่าง
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def append(self, data):
"""เพิ่มโหนดท้ายลิสต์"""
new_node = Node(data)
if self.head is None:
self.head = self.tail = new_node
else:
self.tail.next = new_node
new_node.prev = self.tail
self.tail = new_node
def display(self):
"""แสดงข้อมูลจากหน้าหลัง"""
curr = self.head
if curr is None:
print("ลิสต์ว่าง")
return
print("ข้อมูลในลิสต์:", end=' ')
while curr:
print(curr.data, end=' ')
curr = curr.next
print()
# ทดสอบ
dll = DoublyLinkedList()
for v in [10, 24, 54, 77, 92]:
dll.append(v)
dll.display()
ผลลัพธ์
ข้อมูลในลิสต์: 10 24 54 77 92
โครงสร้าง Node
Node: +--------+--------+--------+ | prev | data | next | +--------+--------+--------+
การเชื่อมโยง
head → [10] ↔ [24] ↔ [54] ↔ [77] ↔ [92] ← tail
↑ ↓
None None
เมธอดพื้นฐานที่ควรมี
append(data)- เพิ่มท้าย O(1)prepend(data)- เพิ่มหน้า O(1)insert(pos, data)- แทรกกลาง O(n)delete_first()- ลบหน้า O(1)delete_last()- ลบท้าย O(1)delete_middle()- ลบกลาง O(n)search(value)- ค้นหา O(n)display()- แสดงผลreverse_display()- แสดงย้อนหลัง (ใช้ tail)