How to reverse an array: We access elements of array using index.We can reverse elements in array without taking any duplicate array.

How to reverse elements in single linked list:
- It is complex to reverse single linked list.
- Single linked list is not bi-directional.
- We can move forward pointer easily.
- Coming in backward direction must be done through a loop every time.

Program Code:
#include<stdio.h> #include<stdlib.h> #include<conio.h> struct node { int data; struct node *link; }; struct node* root = NULL ; void create(void); void reverse(void); void display(void); int count=0; void main() { int ch , len ; while(1) { printf(“\n/**Single linked list Operations**/\n”); printf(“1.Create \n”); printf(“2.Reverse List \n”); printf(“3.Display \n”); printf(“4.Quit \n”); printf(“Enter Choice : “); scanf(“%d”, &ch); switch(ch) { case 1 : create(); break; case 2 : reverse(); break; case 3 : display(); break; case 4 : exit(0); default : printf(“Invalid choice….\n\n”); } } } void create() { struct node *temp,*p; temp = root ; while(1) { p=(struct node *)malloc(sizeof(struct node)); printf(“Enter data :”); scanf(“%d”, &p->data); count++; if(root==NULL) { root = p; p->link = NULL; temp = p; } else { temp->link=p; temp=p; } printf(“Do you want to stop(y/n) : “); if(getch()==’y’) { break; } } p->link=NULL; } void reverse() { struct node *p , *q; int i, j, k, temp; i = 0 ; j = count-1; p = root ; while(i<j) { k = 0 ; q = root ; while(k<j) { q = q->link ; k++ ; } temp = p->data ; p->data = q->data ; q->data = temp ; p = p->link ; i++ ; j– ; } } void display() { if(root == NULL) printf(“List is empty\n\n”); else { struct node* temp = root ; while(temp != NULL) { printf(“%d \n”, temp->data); temp = temp->link ; } } } |