C Program To Reverse Singly Linked List

PROGRAM:
#include <stdio.h>
#include <stdlib.h>

typedef struct _list {
int data;
struct _list *next;
}list;

int main(int argc, char **argv)
{
printf("\n.. Start of singly linked list reverse program .. \n\n");

list *head=NULL, *head_start=NULL, *display = NULL;
list *newnode;
int a = 0;

/* Add 5 elements to linked list */
for (; a<10; a++)
{
newnode = malloc(sizeof(list));
newnode->data = a+1;
newnode->next = NULL;
if (a==0) {
head = newnode;
head_start = newnode;
}
else {
head->next = newnode;
head = head->next;
}
}

/* Display list element before reverse */
display = head_start;
for (a=0; a<10; a++)
{
printf("Ordered data : %d\n", display->data);
display = display->next;
}
printf("\n");

/* Reverse iterative algorithm */
list *next, *prev = NULL, *current;
current = head_start;
while(current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head_start = prev;

/* Display list element after reverse */
display = head_start;
for (a=0; a<10; a++)
{
printf("Reversed data : %d\n", display->data);
display = display->next;
}

/* Free list elements */
display = head_start;
for (a=0; a<10; a++)
{
current = display;
display = display->next;
free(current);
}

printf("\n.. End of singly linked list reverse program .. \n\n");
return 0;
}


OUTPUT : 
.. Start of singly linked list reverse program .. 

Ordered data : 1
Ordered data : 2
Ordered data : 3
Ordered data : 4
Ordered data : 5
Ordered data : 6
Ordered data : 7
Ordered data : 8
Ordered data : 9
Ordered data : 10

Reversed data : 10
Reversed data : 9
Reversed data : 8
Reversed data : 7
Reversed data : 6
Reversed data : 5
Reversed data : 4
Reversed data : 3
Reversed data : 2
Reversed data : 1

.. End of singly linked list reverse program .. 



No comments:

Post a Comment