Untitled
Anonymous
plain_text
04/17/2026 10:19 AM
6.6 KB
11
Indexable
#include <iostream>
using namespace std;
struct node {
int data;
node* prev;
node* next;
};
node* head = NULL;
//create node
node* createnode(int data) {
node* newnode = new node();
newnode->data = data;
newnode->prev = NULL;
newnode->next = NULL;
return newnode;
}
//insert at beginning
void insertAtStart(int data) {
node* newnode = createnode(data);
if (head != NULL) {
newnode->next = head;
head->prev = newnode;
}
head = newnode;
}
//insertion at the end
void insertAtEnd(int data) {
node* newnode = createnode(data);
if (head == NULL) {
head = newnode;
return;
}
node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newnode;
newnode->prev = temp;
}
//insert at a position
void insertAtPosition(int data, int pos) {
if (pos == 1) {
insertAtStart(data);
return;
}
node* newnode = createnode(data);
node* temp = head;
for (int i = 1; i < pos - 1 && temp != NULL; i++) {
temp = temp->next;
}
if (temp == NULL) {
cout << "invalid position" << endl;
delete newnode;
return;
}
newnode->next = temp->next;
newnode->prev = temp;
if (temp->next != NULL) {
temp->next->prev = newnode;
}
temp->next = newnode;
}
// Delete from start
void deleteFromStart() {
if (head == NULL) {
cout << "list is empty\n";
return;
}
node* temp = head;
head = head->next;
if (head != NULL) {
head->prev = NULL;
}
delete temp;
}
// Delete from end
void deleteFromEnd() {
if (head == NULL) {
cout << "List is empty\n";
return;
}
node* temp = head;
if (temp->next == NULL) {
delete temp;
head = NULL;
return;
}
while (temp->next != NULL) {
temp = temp->next;
}
temp->prev->next = NULL;
delete temp;
}
// Delete from position
void deleteFromPosition(int pos) {
if (head == NULL) {
cout << "List is empty\n";
return;
}
if (pos == 1) {
deleteFromStart();
return;
}
node* temp = head;
for (int i = 1; i < pos && temp != NULL; i++) {
temp = temp->next;
}
if (temp == NULL) {
cout << "Invalid Position\n";
return;
}
if (temp->next != NULL) {
temp->next->prev = temp->prev;
}
if (temp->prev != NULL) {
temp->prev->next = temp->next;
}
delete temp;
}
// Display forward
void displayForward() {
node* temp = head;
cout << "Forward: ";
while (temp != NULL) {
cout << temp->data << " <-> ";
temp = temp->next;
}
cout << "NULL\n";
}
// Display backward
void displayBackward() {
if (head == NULL) {
cout << "List is empty\n";
return;
}
node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
cout << "Backward: ";
while (temp != NULL) {
cout << temp->data << " <-> ";
temp = temp->prev;
}
cout << "NULL\n";
}
// Main function with switch-case
int main() {
int choice, data, pos;
do {
cout << "\n===== Doubly Linked List Menu =====\n";
cout << "1. Insert at Start\n";
cout << "2. Insert at End\n";
cout << "3. Insert at Position\n";
cout << "4. Delete from Start\n";
cout << "5. Delete from End\n";
cout << "6. Delete from Position\n";
cout << "7. Display Forward\n";
cout << "8. Display Backward\n";
cout << "9. Exit\n";
cout << "Enter your choice: ";
cin >> choice;
switch (choice) {
case 1:
cout << "Enter data: ";
cin >> data;
insertAtStart(data);
break;
case 2:
cout << "Enter data: ";
cin >> data;
insertAtEnd(data);
break;
case 3:
cout << "Enter data and position: ";
cin >> data >> pos;
insertAtPosition(data, pos);
break;
case 4:
deleteFromStart();
break;
case 5:
deleteFromEnd();
break;
case 6:
cout << "Enter position: ";
cin >> pos;
deleteFromPosition(pos);
break;
case 7:
displayForward();
break;
case 8:
displayBackward();
break;
case 9:
cout << "Exiting...\n";
break;
default:
cout << "Invalid choice\n";
}
} while (choice != 9);
return 0;
}
Editor is loading...
Leave a Comment