Move vowels node at the beginning of linked list in c
C program for Move vowels node at the beginning of linked list. Here more information.
// Include header file
#include <stdio.h>
#include <stdlib.h>
/*
C program for
Shift the vowels node at beginning of linked list
*/
// Linked list node
typedef struct LinkNode
{
// Define useful field of LinkNode
char data;
struct LinkNode * next;
}LinkNode;
LinkNode * getLinkNode(char data)
{
// Create dynamic memory of LinkNode
LinkNode * ref = (LinkNode * ) malloc(sizeof(LinkNode));
if (ref == NULL)
{
// Failed to create memory
return NULL;
}
ref->data = data;
ref->next = NULL;
return ref;
}
typedef struct SingleLL
{
// Define useful field of SingleLL
struct LinkNode * head;
struct LinkNode * tail;
}SingleLL;
SingleLL * getSingleLL()
{
// Create dynamic memory of SingleLL
SingleLL * ref = (SingleLL * ) malloc(sizeof(SingleLL));
if (ref == NULL)
{
// Failed to create memory
return NULL;
}
ref->head = NULL;
ref->tail = NULL;
return ref;
}
// Add new node at end of linked list
void addNode(SingleLL * ref, char data)
{
LinkNode * node = getLinkNode(data);
if (ref->head == NULL)
{
ref->head = node;
}
else
{
// Append the node at last position
ref->tail->next = node;
}
ref->tail = node;
}
// Display linked list element
void display(SingleLL * ref)
{
if (ref->head == NULL)
{
printf("\n Empty linked list");
return;
}
LinkNode * temp = ref->head;
// iterating linked list elements
while (temp != NULL)
{
printf(" %c →", temp->data);
// Visit to next node
temp = temp->next;
}
printf(" NULL\n");
}
// Determine that given value is an vowel or not
int isVowels(char value)
{
if (value == 'a' || value == 'e' ||
value == 'i' || value == 'o' ||
value == 'u' || value == 'A' ||
value == 'E' || value == 'I' ||
value == 'O' || value == 'U')
{
return 1;
}
return 0;
}
// Move the vowels value at beginning position
void shiftVowels(SingleLL * ref)
{
if (ref->head == NULL)
{
printf("\n Empty linked list\n");
return;
}
// Define some auxiliary variable
LinkNode * node = ref->head;
LinkNode * back = NULL;
// iterate linked list nodes
// And shift vowels at front of linked list
while (node != NULL)
{
if (isVowels(node->data) == 1 && back != NULL)
{
// Enter here when
// Node is contain vowel and
// its previous (any) node is not form of vowel
if (node == ref->tail)
{
// When is last node
// Set new last node
ref->tail = back;
}
// Connect previous node to next node
back->next = node->next;
// Connect vowel node to first node
node->next = ref->head;
// Set new head
ref->head = node;
// Get back node
node = back;
}
else
{
back = node;
}
// Visit to next node
node = node->next;
}
}
int main()
{
SingleLL * sll = getSingleLL();
// Constructed linked list
addNode(sll, 'E');
addNode(sll, 'D');
addNode(sll, 'U');
addNode(sll, 'C');
addNode(sll, 'A');
addNode(sll, 'T');
addNode(sll, 'I');
addNode(sll, 'O');
addNode(sll, 'N');
printf(" Before move vowels\n");
// E → D → U → C → A → T → I → O → N → NULL
display(sll);
shiftVowels(sll);
printf(" After move vowels\n");
// O → I → A → U → E → D → C → T → N → NULL
display(sll);
}
Output
Before move vowels
E → D → U → C → A → T → I → O → N → NULL
After move vowels
O → I → A → U → E → D → C → T → N → NULL
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment