在C ++的链表中排列辅音和元音节点?
在这种技术中,我们将以元音作为键的节点转移到开头,将辅音转移到结尾。在这种情况下,我们还维护订单。示例如下-
Input: A-M-A-Z-O-NOutput: 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--ENDA--A--O--M--Z--N--END
以上是 在C ++的链表中排列辅音和元音节点? 的全部内容, 来源链接: utcz.com/z/326957.html