Reversing Single Linked List using C

Description

This program is used to Create and Reverse the created Single Linked List using C.

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

struct node
{
 int data;
 struct node* next;
};
struct node *head1 = NULL, *head2 =NULL;

void reverse();

void main()
{
  int choice;
  do
  {
   printf("\n__MENU__\n1.Enter and Reverse List\n2...EXIT...\n");
   printf("\nENTER your choice\n");
   scanf("%d",&choice);
   switch(choice)
   {
    case 1:reverse(); break;
    case 2:printf("~~~~~~~THANK YOU~~~~~~~\n");break;
   default:printf("INVALID input !!!");break;   
  }
  }while(choice!=2);
}
void reverse()
{
 struct node *temp1,*temp2,*newnode1,*newnode2;
 
 int n,x,i;
 printf("\nEnter no. of elements in the list\n");
 scanf("%d",&n);
 printf("enter %d elements\n",n);
 for(i=0;i<n;i++)
 {
 
  scanf("%d",&x);
  newnode1=(struct node*)malloc(sizeof(struct node*));
  newnode2=(struct node*)malloc(sizeof(struct node*));
  newnode1->data=x;
  newnode2->data=x;
  temp1=head1;temp2=head2;
  if(head1==NULL)
     {
      
      head1=newnode1;
      newnode1->next=NULL;
  }
     else
  {
         while(temp1->next!=NULL)
   temp1=temp1->next;
   temp1->next=newnode1;
   newnode1->next=NULL; 
  }
  if(head2==NULL)
  {
   head2=newnode2;
   newnode2->next=NULL;
  }
  else
  {
   newnode2->next=temp2;
   head2=newnode2;
  }
        
   
 } 
 
 temp1=head1;temp2=head2;

 printf("\nLIST elements are\t");
 while(temp1!=NULL)
 {
  printf("%d\t",temp1->data);
  temp1=temp1->next;
 }
 printf("\n\nReversed order\t\t");
 while(temp2!=NULL)
 {
  printf("%d\t",temp2->data);
  temp2=temp2->next;
 }
 head1=NULL;
 head2=NULL;
}


OUTPUT

Reversing List Output

Labels: ,