Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C ++의 연결 목록에 자음과 모음 노드를 정렬 하시겠습니까?

<시간/>

이 기법에서는 모음이 있는 노드를 키로 시작하고 자음을 끝에 전달합니다. 이 경우에도 우리는 순서를 유지합니다. 예는 아래에 나와 있습니다 -

Input: A-M-A-Z-O-N
Output: A-A-O-M-Z-N
Code (Complexity: O(N), Space O(1))

예시

#include<iostream>
using namespace std;
class Node1{
   public:
   char var1;
   Node1 *next1;
   Node1(char v,Node1 *next1=NULL):var1(v),next1(next1){}
};
Node1 *make_list(char array1[],int size1){
   if(size1 ==0)
   return NULL;
   else {
      Node1 *head = new Node1('o');
      Node1 *temp = head;
      for(int i=0;i<size;++i) {
         temp->next1 = new Node1(array1[i]);
         temp=temp->next1;
      }
      temp=head;
      head = head->next1;
      delete temp;
      return head;
   }
}
void print_list(Node1 *head){
   while(head){
      cout<<head->var1<<"--";
      head = head->next1;
   }
   cout<<"END"<<endl;
}
void insertAfter(Node1** temp,Node1 *n){
   n->next1 = (*temp)->next1;
   (*temp)->next1 = n;
}
bool isVowel(char v){
   switch(v){
      case 'A':
      case 'E':
      case 'I':
      case 'O':
      case 'U':
      return true;
      default:
      return false;
   }
}
Node1 *groupByVowels(Node1 *head){
   Node1 *vowel=NULL,*consonant=NULL;
   vowel = new Node1('L');
   consonant = new Node1('C');
   Node1 *tv = vowel,*tc=consonant;
   for(Node1 *temp=head;temp;){
      Node1 *tt = temp->next1;
      if(isVowel(temp->var1)){
         insertAfter(&tv,temp);
         tv = tv->next1;
      }
   Else {
         insertAfter(∓tc,temp);
         tc=tc->next1;
      }
   temp = tt;
   }
   tv->next1 = consonant->next1;
   tv = vowel;
   vowel=vowel->next1;
   delete tv;
   return vowel;
}
int main(){
   char array1[] = {'A','M','A','Z','O','N'};
   Node1 *head = make_list(array1,sizeof(array1)/sizeof(array1[0]));
   print_list(head);
   head = groupByVowels(head);
   print_list(head);
}

출력

A--M--A--Z--O--N--END
A--A--O--M--Z--N--END