Khi cần tạo danh sách liên kết đôi và hiển thị theo thứ tự ngược, ta đảo ngược con trỏ next và prev của từng nút, sau đó hoán đổi head và tail.
Ví dụ
class Node:
def __init__(self, my_data):
self.prev = None
self.data = my_data
self.next = None
class reverse_list:
def __init__(self):
self.head = None
self.tail = None
def add_data(self, my_data):
new_node = Node(my_data)
if self.head is None:
self.head = self.tail = new_node
self.head.previous = None
self.tail.next = None
else:
self.tail.next = new_node
new_node.previous = self.tail
self.tail = new_node
self.tail.next = None
def reverse_vals(self):
curr = self.head
while curr is not None:
temp = curr.next
curr.next = curr.previous
curr.previous = temp
curr = curr.previous
temp = self.head
self.head = self.tail
self.tail = temp
def print_it(self):
curr = self.head
if self.head is None:
print("Danh sách rỗng")
return
print("Các nút:")
while curr is not None:
print(curr.data)
curr = curr.next
my_instance = reverse_list()
print("Thêm phần tử vào danh sách")
my_instance.add_data(10)
my_instance.add_data(14)
my_instance.add_data(24)
my_instance.add_data(17)
my_instance.add_data(22)
my_instance.print_it()
print("Danh sách sau khi đảo ngược:")
my_instance.reverse_vals()
my_instance.print_it()
Kết quả
Thêm phần tử vào danh sách Các nút: 10 14 24 17 22 Danh sách sau khi đảo ngược: Các nút: 22 17 24 14 10
Giải thích
- Lớp
Nodevàreverse_list. reverse_vals: duyệt từ head, hoán đổi next và prev của mỗi nút, di chuyển theo prev (vì next đã bị đổi).- Sau vòng lặp, hoán đổi head và tail.
- In danh sách trước và sau khi đảo.