Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

이중 연결 목록의 중간에서 새 노드를 삭제하는 Python 프로그램

<시간/>

이중 연결 리스트 중간에서 노드를 삭제해야 하는 경우에는 'Node' 클래스를 생성해야 합니다. 이 클래스에는 노드에 있는 데이터, 연결 목록의 다음 노드에 대한 액세스, 연결 목록의 이전 노드에 대한 액세스의 세 가지 속성이 있습니다.

초기화 기능이 있는 다른 클래스를 생성해야 하며, 이 안에서 노드의 헤드는 'None'으로 초기화됩니다.

연결 리스트에 노드를 추가하고, 노드를 표시하고, 이중 연결 리스트의 끝에서 노드를 삭제하는 여러 가지 방법이 사용자에 의해 정의됩니다.

이중 연결 목록에서 노드에는 포인터가 있습니다. 현재 노드는 다음 노드와 이전 노드에 대한 포인터를 갖습니다. 목록의 마지막 값은 다음 포인터에서 'NULL' 값을 갖습니다. 양방향으로 횡단할 수 있습니다.

아래는 동일한 데모입니다 -

예시

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();

출력

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

설명

  • '노드' 클래스가 생성됩니다.
  • 필수 속성이 있는 다른 클래스가 생성됩니다.
  • 이중 연결 목록에 데이터를 추가하는 데 사용되는 'add_data'라는 메서드가 정의되어 있습니다.
  • 순환 연결 목록의 노드를 표시하는 'print_it'이라는 또 다른 메서드가 정의되어 있습니다.
  • 'delete_from_middle'이라는 또 다른 메소드가 정의되어 있는데, 중간에서 노드를 삭제하고 순환 연결 목록에서 이전 노드를 현재 노드로 만듭니다.
  • 'double_list' 클래스의 객체가 생성되고, 이중 연결 리스트의 시작 부분에서 노드를 삭제하기 위해 메소드가 호출됩니다.
  • 이중 연결 리스트의 루트, 헤드, 테일 노드를 None으로 하는 'init' 메소드가 정의되어 있습니다.
  • 목록은 반복되고 연결 목록의 중간 인덱스에서 모든 노드는 비어 있을 때까지 삭제됩니다.
  • 'print_it' 메소드를 사용하여 콘솔에 표시됩니다.