Doubly Linked List: Delete from End
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct
node
{
int
data;
struct
node *llink;
struct
node *rlink;
};
typedef
struct node* NODE;
NODE getnode();
NODE insert_at_end(NODE first, int
item);
NODE delete_at_end(NODE first);
void display(NODE first);
NODE
getnode()
{
NODE
x;
x
=(NODE) malloc(sizeof(struct node));
x->llink=NULL;
x->rlink=NULL;
return x;
}
void
display(NODE first)
{
NODE
cur;
cur
= first;
printf("\nContents
are:");
if(cur
== NULL)
printf("\nList
is empty. Nothing to display.");
else
{
while(cur!=NULL)
{
printf("%d ", cur->data);
cur = cur->rlink;
}
}
}
NODE
insert_at_end(NODE first, int item)
{
int
val;
NODE
cur, temp;
temp
= getnode();
temp->data
= item;
if(first == NULL) /*Case
1: List is empty*/
{
return
temp;
}
cur= first; /*Case 2: List not empty*/
while(cur->rlink!=NULL)
{
cur
= cur->rlink;
}
cur->rlink = temp;
temp->llink = cur;
return
first;
}
NODE
delete_at_end(NODE first)
{
NODE
prev=NULL, cur;
if(first
== NULL) /*Case
1: List is empty*/
{
printf("\nList
is empty. Cannot delete.");
return
NULL;
}
if(first->rlink == NULL) /*Case 2: List has
only one node*/
{
printf("\nItem
that got deleted is %d", first->data);
free(first);
return
NULL;
}
cur = first; /*Case 3: List is not empty*/
while(cur->rlink!=NULL)
{
prev
= cur;
cur
= cur->rlink;
}
prev->rlink = NULL; /*Delete the Last node.
Update the prev node’s pointer*/
printf("\nItem
that got deleted is %d", cur->data);
free(cur);
return
first;
}
void
main()
{
int
ch, item;
NODE
first = NULL;
while(1)
{
printf("\n\n~~MENU~~");
printf("\n1.Insert
at end");
printf("\n2.Delete
from end");
printf("\n3.Display");
printf("\n4.exit");
printf("\nEnter
your choice: ");
scanf("%d",
&ch);
switch(ch)
{
case
1: printf("\nEnter the value: ");
scanf("%d", &item) ;
first = insert_at_end(first, item);
break;
case 2: first
= delete_at_end(first);
break;
case
3: display(first);
break;
case 4: exit(0);
}
}
}
Output:
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 1
Enter the value: 11
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 1
Enter the value: 12
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 3
Contents are: 11 12
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 2
Item that got deleted is 12
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 2
Item that got deleted is 11
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 2
List is empty. Cannot delete.
~~MENU~~
1.Insert
at end
2.Delete
from end
3.Display
4.exit
Enter
your choice: 3
Contents are:
List is empty. Nothing to display.