บทนำ
การแทรกโหนดใหม่ที่หน้า (prepend) ของ Doubly Linked List ต้องปรับ head pointer และเชื่อมโหนดใหม่กับ 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 prepend(self, data):
new_node = Node(data)
if self.head is None:
self.head = self.tail = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
def display(self):
curr = self.head
while curr:
print(curr.data, end=' ')
curr = curr.next
print()
# ทดสอบ
dll = DoublyLinkedList()
for v in [10, 24, 54, 77, 92]:
dll.prepend(v)
print(f"หลังเพิ่มหน้า {v}:", end=' ')
dll.display()
ผลลัพธ์
หลังเพิ่มหน้า 10: 10 หลังเพิ่มหน้า 24: 24 10 หลังเพิ่มหน้า 54: 54 24 10 หลังเพิ่มหน้า 77: 77 54 24 10 หลังเพิ่มหน้า 92: 92 77 54 24 10
คำอธิบายขั้นตอน Prepend
- สร้าง
new_node - ถ้าว่าง:
head = tail = new_node - ถ้ามีข้อมูล:
new_node.next = head(ใหม่ชี้ไปเก่า)head.prev = new_node(เก่าชี้กลับใหม่)head = new_node(อัปเดต head)
ความซับซ้อน
- เวลา: O(1)
- พื้นที่: O(1)
สรุป Insert Operations
| Operation | Time | Pointers Updated |
|---|---|---|
| Append (ท้าย) | O(1) | tail.next, new.prev, tail |
| Prepend (หน้า) | O(1) | new.next, head.prev, head |
| Insert Middle | O(n) | 4 pointers |