Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình Python tạo danh sách liên kết đôi n nút và hiển thị ngược


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 Node và 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.