บทนำ
Doubly Linked List คือโครงสร้างข้อมูลที่แต่ละโหนด (Node) มี pointer ชี้ไปทั้งโหนดก่อนหน้า (prev) และโหนดถัดไป (next) การค้นหา element ทำได้โดยเริ่มจาก head เดินไปทีละโหนดจนเจอหรือจบลิสต์
โค้ดตัวอย่าง
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
while curr:
print(curr.data, end=' ')
curr = curr.next
print()
def search(self, target):
curr = self.head
position = 1
while curr:
if curr.data == target:
return position
curr = curr.next
position += 1
return -1 # ไม่เจอ
# ทดสอบ
dll = DoublyLinkedList()
for val in [10, 24, 54, 77, 24, 0]:
dll.append(val)
print("ลิสต์:", end=' ')
dll.display()
for target in [77, 7]:
pos = dll.search(target)
if pos != -1:
print(f"พบ {target} ที่ตำแหน่ง {pos}")
else:
print(f"ไม่พบ {target}")
ผลลัพธ์
ลิสต์: 10 24 54 77 24 0 พบ 77 ที่ตำแหน่ง 4 ไม่พบ 7
คำอธิบาย
Nodeเก็บ data, prev, nextappend()เพิ่มท้ายลิสต์ อัปเดต tailsearch()วนจาก head ถึง tail นับตำแหน่ง- เวลา O(n) พื้นที่ O(1)
ข้อดีของ Doubly Linked List
- เดินได้ 2 ทิศทาง (forward/backward)
- ลบโหนดได้ง่ายกว่า Singly (มี prev pointer)
- เหมาะสำหรับการ insert/delete บ่อย