#include using namespace std; template class Node{ public: T data; Node* next; Node(T data, Node* next) : data(data), next(next){} }; template class LinkedList{ Node* head; int size; int search(T value){ Node* temp = head; for(int i=0;idata == value) return i; temp = temp->next; } return -1; } public: LinkedList(T data){ head = new Node(data, nullptr); size = 1; } void insertAtHead(T data){ insertAtPosition(0, data); } void insertAtEnd(T data){ insertAtPosition(size, data); } bool insertAtPosition(int position, T data){ if(position < 0 || position > size) return false; Node* newNode = new Node(data, head); if(position == 0){ head = newNode; } else{ for(int i=0;inext = newNode->next->next; } Node* temp = newNode->next; newNode->next = newNode->next->next; temp->next = newNode; } size++; return true; } bool insertAfterValue(T value, T data){ int index = search(value); cout<* temp = head; while(temp != nullptr){ cout<data<<" "; temp = temp->next; } } }; int main(){ LinkedList list(1); list.insertAtHead(1); list.insertAtPosition(1, 3); list.insertAtEnd(5); list.insertAfterValue(3, 10); list.printList(); return 0; }