Circular Doubly Linked List: Insert at End
#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_end(NODE last,
int item);
void display(NODE last);
NODE getnode()
{
NODE x;
x =(NODE) malloc(sizeof(struct node));
return x;
}
NODE insert_at_end(NODE last,
int item)
{
int val;
NODE cur, temp;
temp = getnode();
temp->data = item;
if(last == NULL)
{
last = temp;
}
else
{
temp->rlink = last->rlink;
last->rlink->llink
= temp;
}
last->rlink = temp;
temp->llink = last;
return temp;
}
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 End");
printf("\n2.Display"); printf("\n3.exit");
printf("\nEnter your choice:
"); scanf("%d",&ch);
switch(ch)
{
case 1: printf("\nEnter the value:
");
scanf("%d",&item);
last = insert_at_end(last, item);
break;
case 2: display(last);
break;
case 3: exit(0);
}
}
}
Output:
~~MENU~~
1.Insert at End
2.Display
3.exit
Enter your choice: 1
Enter the value: 11
~~MENU~~
1.Insert at End
2.Display
3.exit
Enter your choice: 2
Contents are:
| 4994112 | 11 | 4994112 |
~~MENU~~
1.Insert at End
2.Display
3.exit
Enter your choice: 1
Enter the value: 12
~~MENU~~
1.Insert at End
2.Display
3.exit
Enter your choice: 1
Enter the value: 13
~~MENU~~
1.Insert at End
2.Display
3.exit
Enter your choice: 2
Contents are:
|4994160 | 11 | 4994136 |
==> |4994112 | 12 | 4994160 |
==> | 4994136 | 13 | 4994112 |