assignment_05.cpp
Problem Statement
assignment_05.cpp
Implement Doubly Linked List. Include functions for insertion, deletion and search of a number, reverse the list.
Source Code
cpp
#include <iostream>
using namespace std;
typedef struct nodeType {
int data;
nodeType *prev = nullptr;
nodeType *next = nullptr;
} node;
class DoublyLinkedList {
private:
node *head;
public:
DoublyLinkedList() { head = nullptr; }
void insAtBegin() {
node *newNode = new node;
cout << "Enter the value: ";
cin >> newNode->data;
newNode->prev = nullptr;
newNode->next = head;
if (head != nullptr) head->prev = newNode;
head = newNode;
}
void insAtEnd() {
node *newNode = new node;
cout << "Enter the value: ";
cin >> newNode->data;
newNode->next = nullptr;
if (head == nullptr) {
newNode->prev = nullptr;
head = newNode;
} else {
node *temp = head;
while (temp->next != nullptr) temp = temp->next;
temp->next = newNode;
newNode->prev = temp;
}
}
void insAtPos() {
int pos;
cout << "Enter the position: ";
cin >> pos;
if (pos < 1) { cout << "Invalid Position!\n"; return; }
if (pos == 1) { insAtBegin(); return; }
node *temp = head;
for (int i = 1; i < pos - 1 && temp != nullptr; i++) temp = temp->next;
if (temp == nullptr) { cout << "Out of range!\n"; return; }
node *newNode = new node;
cout << "Enter the value: ";
cin >> newNode->data;
newNode->next = temp->next;
newNode->prev = temp;
if (temp->next != nullptr) temp->next->prev = newNode;
temp->next = newNode;
}
void delAtBegin() {
if (head == nullptr) { cout << "List is empty!\n"; return; }
node *temp = head;
head = head->next;
if (head != nullptr) head->prev = nullptr;
delete temp;
}
void delAtEnd() {
if (head == nullptr) { cout << "List is empty!\n"; return; }
if (head->next == nullptr) { delete head; head = nullptr; return; }
node *temp = head;
while (temp->next != nullptr) temp = temp->next;
temp->prev->next = nullptr;
delete temp;
}
void delAtPos() {
if (head == nullptr) { cout << "List is empty!\n"; return; }
int pos;
cout << "Enter the position: ";
cin >> pos;
if (pos < 1) { cout << "Invalid Position!\n"; return; }
if (pos == 1) { delAtBegin(); return; }
node *temp = head;
for (int i = 1; i < pos && temp != nullptr; i++) temp = temp->next;
if (temp == nullptr) { cout << "Out of range!\n"; return; }
if (temp->next != nullptr) temp->next->prev = temp->prev;
if (temp->prev != nullptr) temp->prev->next = temp->next;
delete temp;
}
void search() {
if (head == nullptr) { cout << "List is empty!\n"; return; }
int key, pos = 1;
cout << "Enter the element to search: ";
cin >> key;
node *temp = head;
while (temp != nullptr) {
if (temp->data == key) { cout << "Found at position: " << pos << "\n"; return; }
temp = temp->next;
pos++;
}
cout << "Element not found.\n";
}
void reverse() {
if (head == nullptr || head->next == nullptr) return;
node *curr = head, *temp = nullptr;
while (curr != nullptr) {
temp = curr->prev;
curr->prev = curr->next;
curr->next = temp;
curr = curr->prev;
}
if (temp != nullptr) head = temp->prev;
}
void display() {
node *temp = head;
cout << "List: nullptr ";
while (temp != nullptr) { cout << temp->data << " "; temp = temp->next; }
cout << "nullptr\n";
}
void printMenu() {
cout << "1.insertAtBegin 2.insertAtEnd 3.insertAtPos 4.deleteAtBegin 5.deleteAtEnd \n"
<< "6.deleteAtPos 7.search 8.reverse 0.Display -1.Exit\n";
}
~DoublyLinkedList() {
node *temp;
while (head != nullptr) { temp = head; head = head->next; delete temp; }
}
};
int main() {
DoublyLinkedList list;
int choice;
while (true) {
list.printMenu();
cout << "Enter your choice: ";
cin >> choice;
switch (choice) {
case 1: list.insAtBegin(); break;
case 2: list.insAtEnd(); break;
case 3: list.insAtPos(); break;
case 4: list.delAtBegin(); break;
case 5: list.delAtEnd(); break;
case 6: list.delAtPos(); break;
case 7: list.search(); break;
case 8: list.reverse(); break;
case 0: list.display(); break;
case -1: cout << "Exiting...\n"; return 0;
default: cout << "Wrong choice. Try again.\n";
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160