Data redundancy

#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node{
char data[20];
struct node *link;
};
void main()
{
struct node *head=NULL,*ptr=NULL,*temp=NULL,*ptr2,*ptr3,*ptr4,*temp2;
int i,n;
clrscr();
printf("enter the number of nodes\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
   temp=(struct node *)malloc(sizeof(struct node));
  printf("enter the data in node part\n");
   fflush (stdin);
   gets(temp->data);
  // scanf("%d",&temp->data);
   temp->link=NULL;
   if(head==NULL)
     { head=temp;
      }
   else
   {
      ptr=head;
      while(ptr->link!=NULL)
       ptr=ptr->link;
ptr->link=temp;
}
}
      ptr=head;//sorting algorithm
      while(ptr->link!=NULL)
      {
ptr2=ptr;
ptr=ptr->link;
ptr3=ptr;
while(ptr3!=NULL)
{
      if(strcmp(ptr2->data,ptr3->data)>0)
      {
   strcpy(ptr4->data,ptr3->data);
   strcpy(ptr3->data,ptr2->data);
   strcpy(ptr2->data,ptr4->data);
  }
  ptr3=ptr3->link;
}
}
printf("before reduncy\n");
      ptr=head;
      while(ptr!=NULL)
     { printf("%s\n",ptr->data);
       ptr=ptr->link;
}
    ptr=head;
  while(ptr->link!=NULL)
      {
ptr2=ptr;
ptr=ptr->link;
ptr3=ptr;
while(ptr3!=NULL)
{
if(strcmp(ptr2->data,ptr3->data)==0)
       {
    temp2=ptr3;
    ptr3=ptr3->link;
    ptr2->link=ptr3;
    temp2->link=NULL;
    free(temp2);
    ptr=ptr3;
    }
       else
       ptr3=ptr3->link;
}
}
printf("after reduce reduncy\n");
ptr=head;
while(ptr!=NULL)
     { printf("%s\n",ptr->data);
       ptr=ptr->link;
}
getch();
}