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