PROGRAM9-DSA
PROGRAM9-DSA
AIM : Write a program to implement doubly linked list for the following
operations: Create, Display, inserting, counting, searching, traversing and
deletion.
TOOLS USED : Visual Studio Code Editor
SOURCE CODE:
#include <iostream>
using namespace std;
struct Node {
int data;
Node *prev, *next;
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
class DoublyLinkedList {
Node* head;
public:
DoublyLinkedList() : head(nullptr) {}
void create(int value) {
Node* newNode = new Node(value);
if (!head) head = newNode;
else {
Node* temp = head;
while (temp->next) temp = temp->next;
temp->next = newNode;
newNode->prev = temp; }
cout << value << " added.\n";
}
void display() {
if (!head) { cout << "List is empty!\n"; return; }
for (Node* temp = head; temp; temp = temp->next) cout << temp->data << " <-> ";
cout << "NULL\n"; }
void insert(int value, int pos) {
Node* newNode = new Node(value);
if (pos == 1) {
newNode->next = head;
if (head) head->prev = newNode;
head = newNode; }
else {
Node* temp = head;
for (int i = 1; temp && i < pos - 1; i++) temp = temp->next;
if (!temp) { cout << "Invalid position!\n"; return; }
newNode->next = temp->next;
newNode->prev = temp;
if (temp->next) temp->next->prev = newNode;
temp->next = newNode;
}
cout << value << " inserted at position " << pos << ".\n";
}
void search(int value) {
Node* temp = head;
int pos = 1;
while (temp) {
if (temp->data == value) { cout << value << " found at position " << pos << ".\n";
return; }
temp = temp->next;
pos++;
}
cout << value << " not found.\n";
}
void countNodes() {
int count = 0;
for (Node* temp = head; temp; temp = temp->next) count++;
cout << "Number of nodes: " << count << ".\n";
}
void deleteNode(int value) {
if (!head) { cout << "List is empty.\n"; return; }
Node* temp = head;
while (temp && temp->data != value) temp = temp->next;
if (!temp) { cout << value << " not found.\n"; return; }
if (temp->prev) temp->prev->next = temp->next;
else head = temp->next;
if (temp->next) temp->next->prev = temp->prev;
delete temp;
cout << value << " deleted.\n";
}
void traverse() { display(); }
};
int main() {
DoublyLinkedList list;
int choice, value, pos;
do {
cout << "\n1. Create 2. Display 3. Insert 4. Count 5. Search 6. Delete 7. Exit\nEnter
choice: ";
cin >> choice;
switch (choice) {
case 1: cout << "Enter value: "; cin >> value; list.create(value); break;
case 2: list.display(); break;
case 3: cout << "Enter value and position: "; cin >> value >> pos; list.insert(value,
pos); break;
case 4: list.countNodes(); break;
case 5: cout << "Enter value to search: "; cin >> value; list.search(value); break;
case 6: cout << "Enter value to delete: "; cin >> value; list.deleteNode(value); break;}
} while (choice != 7);
return 0;
}
OUTPUT:
LEARNING OUTCOMES:
1. Understanding Doubly Linked List: Learn to use bidirectional links to traverse nodes in
both directions.
2. Core Operations: Implement create, display, insert, count, search, traverse, and delete in
minimal, efficient code.
3. Dynamic Memory Management: Work with pointers and new/delete in C++.