Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ลบโหนดหน้า Doubly Linked List ใน Python

บทนำ

การลบโหนดหน้า (head) ของ Doubly Linked List ทำได้ O(1) เพราะมี 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 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 delete_first(self):
        if self.head is None:
            return
        
        if self.head == self.tail:
            self.head = self.tail = None
        else:
            self.head = self.head.next
            self.head.prev = None

# ทดสอบ
dll = DoublyLinkedList()
for v in [10, 24, 54, 77, 92]:
    dll.append(v)

print("เริ่มต้น:", end=' ')
dll.display()

while dll.head:
    dll.delete_first()
    print("หลังลบหน้า:", end=' ')
    dll.display()

ผลลัพธ์

เริ่มต้น: 10 24 54 77 92
หลังลบหน้า: 24 54 77 92
หลังลบหน้า: 54 77 92
หลังลบหน้า: 77 92
หลังลบหน้า: 92
หลังลบหน้า: (ว่าง)

คำอธิบาย

  • ถ้า 1 โหนด: head = tail = None
  • ถ้ามากกว่า: head = head.next แล้ว head.prev = None
  • O(1) ไม่ต้อง traverse

สรุป Delete Operations

OperationTimeCondition
Delete FirstO(1)มี head pointer
Delete LastO(1)มี tail pointer
Delete MiddleO(n)ต้องเดินหาตำแหน่ง
Delete by ValueO(n)ต้อง search ก่อน