บทนำ
การหาค่าสูงสุด (max) และต่ำสุด (min) ใน Doubly Linked List ทำได้โดยเดินจาก head ถึง tail เก็บค่า max/min ไปเรื่อยๆ
โค้ดตัวอย่าง
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 find_max(self):
if self.head is None:
return None
max_val = self.head.data
curr = self.head.next
while curr:
if curr.data > max_val:
max_val = curr.data
curr = curr.next
return max_val
def find_min(self):
if self.head is None:
return None
min_val = self.head.data
curr = self.head.next
while curr:
if curr.data < min_val:
min_val = curr.data
curr = curr.next
return min_val
# ทดสอบ
dll = DoublyLinkedList()
for v in [10, 24, 54, 77, 92]:
dll.append(v)
print("ลิสต์:", end=' ')
dll.display()
print(f"ค่าสูงสุด: {dll.find_max()}")
print(f"ค่าต่ำสุด: {dll.find_min()}")
ผลลัพธ์
ลิสต์: 10 24 54 77 92 ค่าสูงสุด: 92 ค่าต่ำสุด: 10
คำอธิบาย
- เริ่มต้น
max_val = min_val = head.data - เดิน
curr = head.nextจนจบ - อัปเดต max/min เมื่อเจอค่าที่มากกว่า/น้อยกว่า
- คืน
Noneถ้าลิสต์ว่าง
การประยุกต์: หา Node Object เอง (ไม่ใช่แค่ค่า)
def find_max_node(self):
if self.head is None:
return None
max_node = self.head
curr = self.head.next
while curr:
if curr.data > max_node.data:
max_node = curr
curr = curr.next
return max_node
# ใช้งาน
node = dll.find_max_node()
if node:
print(f"Max node at address {id(node)} with data {node.data}")