-------------------------------------------------------------------------------------------------------------------
Doubly link list
Create
a node and insert and delete ,frist,last,middle,specific position
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next,*prev;
} ;
struct node *head=NULL ,
*newnode,*temp=NULL,*q,*s;
voiddeletelast();
voiddeletefirst();
voiddeletemid();
voiddeletesp();
voidinsertfirst();
voidinsertlast();
voidinsertmid();
voidinsertsp();
voidcreatenode();
void display();
void
main()
{
intch;
clrscr();
do
{
printf("\n\t1
. Insert at first \t");
printf(" \t2 . Insert at last \t");
printf("\n\t3
. Insert at middel \t");
printf(" \t4 . Insert at specific location \t");
printf("\n\t5
. LIST Display..\t ");
printf(" \t6 . Delete from first \t");
printf("\n\t7. Delete from last \t");
printf(" \t8 . Delete from middel \t");
printf("\n\t9
. Delete from specific location \t");
printf("
\n\t10 . *..........Exit................ ");
printf("\n\n\t\t
Enter your choice............ ");
scanf("%d",&ch);
switch(ch)
{
case
1:createnode();
insertfirst();
printf("\nNode
inserted Sucessfully \n");
break;
case
2:createnode();
insertlast();
printf("\nNode
inserted Sucessfully \n");
break;
case
3:createnode();
insertmid();
printf("\nNode
inserted Sucessfully \n");
break;
case
4:createnode();
insertsp();
break;
case
5:display();
printf("\n\n");
break;
case
6:deletefirst();
printf("\n\n");
break;
case
7:deletelast();
printf("\n\n");
break;
case
8:deletemid();
printf("\n\n");
break;
case
9:deletesp();
printf("\n\n");
break;
case
10:exit(0);
default :printf("\n\n Re enter u r choice
.......");
}
}while(1);
getch();
}
//------------------------------------------------------------------------------------------
voidcreatenode()
{
newnode= (struct node * )(malloc) (sizeof (struct node));
newnode->next=NULL;
newnode->prev=NULL;
//<------------------
printf(" Enter data ");
scanf("%d",&newnode->data);
}
voidinsertfirst()
{
if(head==NULL)
{
head=newnode;
}
else
{ newnode->next=head;
head->prev=newnode; //<---------------
head=newnode;
}
}
//------------------------------------------------------------------------------------------
voidinsertlast()
{
if(head==NULL)
{
head=newnode;
}
else
{
temp=head;
while(temp->next!=NULL) //reach to last node
{
temp=temp->next;
}
temp->next=newnode;
//connect newnode
newnode->prev=temp;
}
}
voidinsertmid()
{
intcnt=1,m,i=1;
if(head==NULL)
{
head=newnode;
}
else
{
temp=head;
while(temp->next!=NULL) //reach to last node
{
cnt++;
temp=temp->next;
}
temp=head;
m=cnt/2;
while(i<m)
{
temp=temp->next;
i++;
}
q=temp->next;
q->prev=temp;
temp->next=newnode;
newnode->prev=temp; //connect newnode
newnode->next=q;
q->prev=newnode;
}
}
//----------------------------------------------------------------------------------------------------
voidinsertsp()
{
intcnt=1,p,i=1;
printf("\n\n Enter postion ");
scanf("%d",&p);
if(head==NULL)
{
printf("List is empty ...........");
}
else
{
temp=head;
while(temp->next!=NULL) //count nodes
{
cnt++;
temp=temp->next;
}
if(p>1&&p<cnt)
{
temp=head;
while(i<p)
{
temp=temp->next;
i++;
}
q=temp->next;
q->prev=temp;
temp->next=newnode;
newnode->prev=temp; //connect newnode
newnode->next=q;
q->prev=newnode;
printf("\nNode
inserted Sucessfully \n");
}
else
printf("\n\n
plzreEnterpostion ....");
}
}
//--------------------------------------------------------------------------------------------------
void
display()
{
struct node *temp ;
temp=head;
if(head==NULL)
printf("XXXXXX.............LIST IS
EMPTY...........XXXXX");
else{
while(temp!=NULL)
{ printf("%d ",temp->data);
temp=temp->next;
}
}
}
//----------------------------------------------------------------------------------------------
voiddeletefirst()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
{
temp=head;
head=temp->next;
temp->prev=head ;
printf(" Deleted node is---- %d----",temp->data);
free(temp);
}
}
//-------------------------------------------------------------------------------------------------
voiddeletelast()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
{
temp=head;
while(temp->next->next!=NULL)
{
temp=temp->next;
}
q=temp->next;
q->prev=temp;
printf(" Deleted node is---- %d----",q->data);
free(q);
temp->next=NULL;
}
}
//----------------------------------------------------------------------------------------------------
voiddeletemid()
{
intcnt=1,m,i=1;
if(head==NULL)
{
printf("\n\n List is empty .............");
}
else
{
temp=head;
while(temp->next!=NULL)
{
cnt++;
temp=temp->next;
}
temp=head;
m=cnt/2;
while(i<m)
{
temp=temp->next;
i++;
}
q=temp->next;
q->prev=temp;
s=q->next;
q->prev=s;
printf("\n\n
Deleted Node is %d ",q->data);
free(q);
temp->next=s;
s->prev=temp;
}
}
//--------------------------------------------------------------------------------------------------
voiddeletesp()
{
intcnt=1,p,i=1;
printf("\n\n Enter postion ");
scanf("%d",&p);
if(head==NULL)
{
printf("List is empty ...........");
}
else
{
temp=head;
while(temp->next!=NULL) //count nodes
{
cnt++;
temp=temp->next;
}
if(p>1&&p<cnt)
{
temp=head;
while(i<p)
{
temp=temp->next;
i++;
}
q=temp->next;
q->prev=temp;
s=q->next;
s->prev=q;
printf("\n\n
Deleted Node is %d ",q->data);
free(q);
temp->next=s;
s->prev=temp;
}
else
printf("\n\n
plzreEnterpostion ....");
}
}