Doubly Linked List Insertion
Sun May 14 2023 19:23:32 GMT+0000 (Coordinated Universal Time)
Saved by @prachi
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *prev, *next;
};
struct node* head = NULL;
void display()
{
if (head == NULL) {
printf("\nList is empty\n");
return;
}
struct node* temp;
temp = head;
while (temp != NULL) {
printf("Data = %d\n", temp->data);
temp = temp->next;
}
}
void insertAtFront()
{
int n;
struct node* temp;
temp = (struct node*)malloc(sizeof(struct node));
printf("\nEnter number to be inserted: ");
scanf("%d", &n);
temp->data = n;
temp->prev = NULL;
temp->next = head;
head = temp;
}
void insertAtEnd()
{
int n;
struct node *temp, *ptr;
temp = (struct node*)malloc(sizeof(struct node));
temp->prev = NULL;
temp->next = NULL;
printf("\nEnter number to be inserted: ");
scanf("%d", &n);
temp->data = n;
temp->next = NULL;
ptr = head;
if (head == NULL) {
head = temp;
}
else {
while (ptr->next != NULL)
ptr = ptr->next;
temp->prev = ptr;
ptr->next = temp;
}
}
void insertAtPosition()
{
int n, pos, i = 1;
struct node *temp, *newnode;
newnode = malloc(sizeof(struct node));
newnode->next = NULL;
newnode->prev = NULL;
printf("\nEnter position : ");
scanf("%d", &pos);
if (head == NULL) {
head = newnode;
newnode->prev = NULL;
newnode->next = NULL;
}
else if (pos == 1) {
insertAtFront();
}
else {
printf("\nEnter number to be inserted: ");
scanf("%d", &n);
newnode->data = n;
temp = head;
while (i < pos - 1) {
temp = temp->next;
i++;
}
newnode->next = temp->next;
newnode->prev = temp;
temp->next = newnode;
temp->next->prev = newnode;
}
}
// Driver Code
int main()
{
int choice;
while (1) {
printf("\n1.Insert at beginning\n2.Insert in middle\n3.Insert at end\n4.Exit\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
insertAtFront();
display();
break;
case 2:
insertAtPosition();
display();
break;
case 3:
insertAtEnd();
display();
break;
case 4:
exit(1);
break;
default:
printf("Invalid Choice\n");
continue;
}
}
return 0;
}



Comments