Tuesday 27 June 2017
Reverse Single Link List
/*Data Node Structure*/
typedef struct node {
int value;
struct node *next;
}mynode;
// Globals (not required, though).
mynode *head, *tail;
// Function to add new nodes to the linked list
void add(int value) {
mynode * tmp = Null;
temp = (mynode *) malloc(sizeof(struct node));
temp->next=(mynode *)0;
temp->value=value;
if(head==(mynode *)0) {
head=temp;
tail=temp;
}
else {
tail->next=temp;
tail=temp;
}
}
// Function to print the linked list.
void print_list() {
printf("\n\n");
for(temp=head; temp!=(mynode *)0; temp=temp->next) {
printf("[%d]->",(temp->value));
}
}
/* Iterative Reverse*/
void iterative_reverse()
{
mynode *p, *q, *r;
if(head == (mynode *)0) {
return;
}
p = head;
q = p->next;
p->next = (mynode *)0;
while (q != (mynode *)0) {
r = q->next;
q->next = p;
p = q;
q= r;
}
head = p;
}
// Reverse the linked list recursively
It consume more stack memory.
int main()
{
// Reverse it.
if(head != (mynode *)0)
{
temp = reverse_recurse(head);
temp->next = (mynode *)0;
}
}
mynode* reverse_recurse(mynode *root) {
if(root->next!=(mynode *)0)
{
reverse_recurse(root->next);
root->next->next=root;
return(root);
}
else {
head=root;
}
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment