在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

以上是 在C ++的链表中排列辅音和元音节点? 的全部内容, 来源链接: utcz.com/z/326957.html

回到顶部