Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để xóa một nút mới khỏi giữa danh sách được liên kết kép

Khi được yêu cầu xóa một nút khỏi giữa danh sách được liên kết kép, một lớp ‘Node’ cần được tạo. Trong lớp này, có ba thuộc tính, dữ liệu có trong nút, quyền truy cập vào nút tiếp theo của danh sách được liên kết và quyền truy cập vào nút trước đó của danh sách được liên kết.

Một lớp khác cần được tạo sẽ có chức năng khởi tạo và phần đầu của nút sẽ được khởi tạo thành 'Không có' bên trong lớp này.

Người dùng xác định nhiều phương pháp để thêm nút vào danh sách được liên kết, hiển thị các nút và xóa nút khỏi phần cuối của danh sách được liên kết kép.

Trong một danh sách được liên kết kép, các nút có các con trỏ. Nút hiện tại sẽ có một con trỏ đến nút tiếp theo cũng như nút trước đó. Giá trị cuối cùng trong danh sách sẽ có giá trị ‘NULL’ trong con trỏ tiếp theo. Nó có thể được đi ngang theo cả hai hướng.

Dưới đây là một minh chứng cho điều tương tự -

Ví dụ

Nút
class Node:
   def __init__(self, my_data):
      self.prev = None
      self.data = my_data
      self.next = None
class double_list:
   def __init__(self):
      self.head = None
      self.tail = None
      self.size = 0;
   def add_data(self, my_data):
      new_node = Node(my_data)
      if(self.head == 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 print_it(self):
      curr = self.head
      if (self.head == None):
         print("The list is empty")
         return
      print("The nodes in the doubly linked list are :")
      while curr != None:
         print(curr.data)
         curr = curr.next
   def delete_from_middle(self):
      if(self.head == None):
         return;
      else:
         curr = self.head
         mid = (self.size//2) if(self.size % 2 == 0) else((self.size+1)//2)
         for i in range(1, mid):
            curr = curr.next;
         if(curr == self.head):
            self.head = curr.next
            self.tail.next = None
         elif(curr == self.tail):
            self.tail = self.tail.prev;
         else:
            curr.prev.next = curr.next;
            curr.next.prev = curr.prev;
         current = None;
      self.size = self.size - 1;
my_instance = double_list()
print("Elements are being added to the doubly linked list")
my_instance.add_data(10)
my_instance.add_data(24)
my_instance.add_data(54)
my_instance.add_data(77)
my_instance.add_data(92)
my_instance.print_it()
while(my_instance.head != None):
my_instance.delete_from_middle();
print("The list after deleting the element from the middle is : ")
my_instance.print_it();

Đầu ra

Elements are being added to the doubly linked list
The nodes in the doubly linked list are :
10
24
54
77
92
The list after deleting the element from the middle is :
The nodes in the doubly linked list are :
24
54
77
92
The list after deleting the element from the middle is :
The nodes in the doubly linked list are :
54
77
92
The list after deleting the element from the middle is :
The nodes in the doubly linked list are :
77
92
The list after deleting the element from the middle is :
The nodes in the doubly linked list are :
92
The list after deleting the element from the middle is :
The list is empty

Giải thích

  • Lớp 'Node' đã được tạo.
  • Một lớp khác với các thuộc tính bắt buộc được tạo.
  • Một phương thức có tên 'add_data' được xác định, được sử dụng để thêm dữ liệu vào danh sách được liên kết kép.
  • Một phương thức khác có tên là 'print_it' được xác định, phương thức này sẽ hiển thị các nút của danh sách liên kết vòng tròn.
  • Một phương thức khác có tên là ‘delete_from_middle’ được xác định, sẽ xóa nút ở giữa và đặt nút trước đó làm nút hiện tại trong danh sách liên kết vòng.
  • Một đối tượng của lớp 'double_list' được tạo và các phương thức được gọi trên nó để xóa một nút khỏi đầu danh sách được liên kết kép.
  • Một phương thức 'init' được xác định, rằng các nút gốc, đầu và cuối của danh sách được liên kết kép thành Không.
  • Danh sách được lặp lại và mọi nút từ chỉ mục giữa của danh sách được liên kết sẽ bị xóa cho đến khi nó trống.
  • Điều này được hiển thị trên bảng điều khiển bằng phương thức "print_it".