Circular Doubly Linked List: Delete from Front
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *llink;
struct node *rlink;
};
typedef struct node* NODE;
NODE getnode();
NODE insert_at_front(NODE last,
int item);
NODE delete_at_front(NODE last);
void display(NODE last);
NODE getnode()
{
NODE x;
x =(NODE)
malloc(sizeof(struct node));
return x;
}
NODE insert_at_front(NODE last,
int item)
{
int val;
NODE temp;
temp = getnode();
temp->data = item;
if(last == NULL) /*Case 1: List is empty*/
{
last = temp;
}
else /*Case 2: If not empty*/
{
temp->rlink =
last->rlink;
last->rlink->llink = temp;
}
temp->llink = last;
last->rlink = temp;
return last;
}
NODE delete_at_front(NODE last)
{
NODE temp;
if(last == NULL)
{
printf("\n
List is empty");
return NULL;
}
if(last->rlink ==
last)
{
printf("\nThe node %d is deleted",last->data);
free(last);
return NULL;
}
temp = last->rlink;
last->rlink =
temp->rlink;
last->rlink->llink
= last;
printf("\nThe
node %d is deleted",temp->data);
free(temp);
return last;
}
void display(NODE last)
{
NODE cur;
printf("\nContents
are:\n");
if(last == NULL)
printf("\nList
is empty. Nothing to display.");
else
{
cur =
last->rlink;
while(cur !=
last)
{
printf("|%d | %d | %d | ==>
", cur->llink, cur->data, cur->rlink);
cur =
cur->rlink;
}
printf("| %d
| %d | %d | ", cur->llink,
cur->data, cur->rlink);
}
}
void main()
{
int ch, item;
NODE last = NULL;
while(1)
{
printf("\n\n~~MENU~~");
printf("\n1.Insert at front");
printf("\n2.Delete at front");
printf("\n3.Display");
printf("\n4.exit");
printf("\nEnter
your choice: ");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("\nEnter the value: ");
scanf("%d",&item);
last = insert_at_front(last, item);
break;
case 2: last = delete_at_front(last);
break;
case 3: display(last);
break;
case 4:
exit(0);
}
}
}
Output:
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 1
Enter the value: 11
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 1
Enter the value: 12
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 3
Contents are:
|5125192 | 12 | 5125192 |
==> | 5125216 | 11 | 5125216 |
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 1
Enter the value: 14
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 3
Contents are:
|5125192 | 14 | 5125216 |
==> |5125240 | 12 | 5125192 |
==> | 5125216 | 11 | 5125240 |
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 2
The node 14 is deleted
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 2
The node 12 is deleted
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 2
The node 11 is deleted
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 2
List is empty
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 3
Contents are:
List is empty. Nothing to
display.
~~MENU~~
1.Insert at front
2.Delete at front
3.Display
4.exit
Enter your choice: 4