Just thought of sharing the code i written to learn linked list implementation the day before my data structures model practical exam.
/*
* linkedlist.c
*
* Copyright 2009 Rag Sagar.V <ragsagar@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list *next;
}LIST;
LIST *ptr,*temp,*start=NULL;
void insert_after(int ,int );
void remove_item(int );
void display(void);
int count=0;
int main()
{
int item,opt,dat;
system("clear");
ptr=NULL;
/* printf("%d",sizeof(LIST)); */
do
{
printf("\n########## MENU ##########\n");
printf("1.Insert\n2.Remove\n3.Display\n4.Exit\n");
printf("Enter your option : ");
scanf("%d",&opt);
switch(opt)
{
case 1:
printf("Enter the data to insert ");
scanf("%d",&item);
if(count==0)
{
ptr = (LIST *)malloc(sizeof(LIST));
ptr->next = NULL;
ptr->data = item;
start = ptr;
}
else
{
printf("Enter the item after which you have to insert new element : ");
scanf("%d",&dat);
insert_after(dat,item);
}
count++;
break;
case 2:
if(count==0)
{
printf("\nList is empty\n"); break;
}
printf("Enter the item to remove : ");
scanf("%d",&item);
remove_item(item);
count--;
break;
case 3:
if(count==0)
{
printf("\nList is empty\n");
break;
}
else
{
printf("List elements are \n"); display();
}
break;
case 4: break;
}
}while(opt!=4);
return 0;
}
void insert_after(int data, int item)
{
LIST *tmp;
temp=(LIST *)malloc(sizeof(LIST));
temp->data=item;
ptr=start;
while(ptr!=NULL)
{
if(ptr->data==data)
{
tmp=ptr->next;
ptr->next=temp;
temp->next=tmp;
break;
}
ptr=ptr->next;
}
}
void remove_item(int item)
{
ptr=start;
if(ptr->data == item)
{
start = ptr->next;
free(ptr);
}
while(ptr->next!=NULL)
{
if((ptr->next)->data==item)
{
temp=ptr->next;
ptr->next=(ptr->next)->next;
free(temp);
break;
}
ptr=ptr->next;
}
}
void display()
{
ptr = start;
while(ptr!=NULL)
{
printf("%d -> ",ptr->data);
ptr=ptr->next;
}
}


