DSA LAB 8
DSA LAB 8
class Node {
public:
int data;
Node* next;
Node(int val) {
data = val;
next = nullptr;
}
};
class LinkedList {
private:
Node* head;
public:
LinkedList() {
head = nullptr;
}
void deleteFromStart() {
if (!head) {
cout << "List is empty!" << endl;
return;
}
Node* temp = head;
head = head->next;
delete temp;
}
void deleteFromEnd() {
if (!head) {
cout << "List is empty!" << endl;
return;
}
if (!head->next) {
delete head;
head = nullptr;
return;
}
Node* temp = head;
while (temp->next && temp->next->next) {
temp = temp->next;
}
delete temp->next;
temp->next = nullptr;
}
bool IsEmpty() {
return head == nullptr;
}
void PrintLinkedList() {
if (!head) {
cout << "List is empty!" << endl;
return;
}
Node* temp = head;
while (temp) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
};
int main() {
LinkedList list;
int choice, val, index;
do {
cout << "Menu:\n1. Insert at Front\n2. Insert at Tail\n3. Insert at Any
Node\n4. Delete from Start\n5. Delete from End\n6. Delete Node from Any Node\n7.
Check if Empty\n8. Print Linked List\n9. Exit\nEnter your choice: ";
cin >> choice;
switch (choice) {
case 1: cout << "Enter value to insert at front: "; cin >> val;
list.InsertAtFront(val); break;
case 2: cout << "Enter value to insert at tail: "; cin >> val;
list.InsertAtTail(val); break;
case 3: cout << "Enter value and index to insert at: "; cin >> val >>
index; list.insertAtAnyNode(val, index); break;
case 4: list.deleteFromStart(); break;
case 5: list.deleteFromEnd(); break;
case 6: cout << "Enter index to delete node from: "; cin >> index;
list.deleteNodeFromAnyNode(index); break;
case 7: if (list.IsEmpty()) cout << "The list is empty.\n"; else cout
<< "The list is not empty.\n"; break;
case 8: list.PrintLinkedList(); break;
case 9: cout << "Exiting program.\n"; break;
default: cout << "Invalid choice! Please try again.\n";
}
} while (choice != 9);
return 0;
}