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

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

<시간/>

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

순환 연결 리스트에서 머리와 뒤쪽은 서로 인접해 있습니다. 연결되어 원을 이루며 마지막 노드에 'NULL' 값이 없습니다.

초기화 기능이 있는 다른 클래스를 생성해야 하며 노드의 헤드는 'None'으로 초기화됩니다. 크기 변수는 0으로 초기화됩니다.

연결 목록에 노드를 추가하고 콘솔에 출력하고 중간 인덱스에서 노드를 삭제하는 데 도움이 되는 사용자 정의 함수가 있을 것입니다.

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

예시

class Node:  
   def __init__(self,data):  
      self.data = data;  
      self.next = None;  
   
class list_creation:  
   def __init__(self):  
      self.head = Node(None);  
      self.tail = Node(None);  
      self.head.next = self.tail;  
      self.tail.next = self.head;  
      self.size = 0;  
     
   def add_data(self,my_data):  
      new_node = Node(my_data);  
      if self.head.data is None:  
         self.head = new_node;  
         self.tail = new_node;  
         new_node.next = self.head;  
      else:  
         self.tail.next = new_node;  
         self.tail = new_node;  
         self.tail.next = self.head;  
      self.size = int(self.size)+1;  
     
   def delete_from_mid(self):  
      if(self.head == None):  
         return;  
      else:  
         count = (self.size//2) if (self.size % 2 == 0) else ((self.size+1)//2);  
         if( self.head != self.tail ):  
            temp = self.head;  
            curr = None;  
            for i in range(0, count-1):  
               curr = temp;  
               temp = temp.next;  
            if(curr != None):  
               curr.next = temp.next;  
               temp = None;  
            else:  
               self.head = self.tail = temp.next;  
               self.tail.next = self.head;  
               temp = None;  
         else:  
            self.head = self.tail = None;  
      self.size = self.size - 1;  
           
   def print_it(self):  
      curr = self.head;  
      if self.head is None:  
         print("The list is empty");  
         return;  
      else:  
         print(curr.data),  
         while(curr.next != self.head):  
            curr = curr.next;  
            print(curr.data),  
         print("\n");  
   
class circular_linked_list:  
   my_cl = list_creation()  
   my_cl.add_data(11)  
   my_cl.add_data(52)  
   my_cl.add_data(36)  
   my_cl.add_data(74)
   print("The original list is :")
   my_cl.print_it()
   while(my_cl.head != None):  
      my_cl.delete_from_mid()
      print("The list after updation is :")
      my_cl.print_it();

출력

The original list is :
11
52
36
74

The list after updation is :
11
36
74

The list after updation is :
11
74

The list after updation is :
74

The list after updation is :
The list is empty

설명

  • '노드' 클래스가 생성됩니다.
  • 필수 속성이 있는 다른 클래스가 생성됩니다.
  • 순환 연결 목록에 데이터를 추가하는 데 사용되는 'add_data'라는 또 다른 메서드가 정의되어 있습니다.
  • 'delete_from_middle'이라는 또 다른 메서드가 정의되어 있습니다. 이 메서드는 참조를 제거하여 중간에서 요소를 하나씩 삭제합니다.
  • 연결 목록 데이터를 콘솔에 표시하는 데 사용되는 'print_it'이라는 또 다른 메서드가 정의되어 있습니다.
  • 'list_creation' 클래스의 객체가 생성되고 이에 대한 메소드가 호출되어 데이터를 추가합니다.
  • 'delete_from_middle' 메소드가 호출됩니다.
  • 연결된 목록의 노드를 반복하고 가장 가운데에 있는 인덱스를 가져와 요소를 삭제하기 시작합니다.
  • 'print_it' 메소드를 사용하여 콘솔에 표시됩니다.