I am implementing inserttion in singly linked list before given element. Below is my implementation. Please help me.
#include <bits/stdc++.h>
using namespace std;
class Node{
public:
int data;
Node* next;
Node(){
data=0;
next= nullptr;
}
explicit Node(int input){
data=input;
next= nullptr;
}
};
class implement{
private:
Node* root;
public:
implement(){
root= nullptr;
}
void insert(int input){
root=insert(root, input);
}
Node* insert(Node* r, int input){
if(r== nullptr) r=new Node(input);
else r->next=insert(r->next, input);
return r;
}
void newNode(int input, int num){
root=newNode(root, input, num);
}
Node* newNode(Node* r, int input, int num){
while(r!= nullptr){
if(r->data==num){
Node * temp=new Node(input);
temp->next=r;
return temp;
}else if(r->next->data==num){
Node* temp=new Node(input);
temp->next=r->next;
r->next=temp;
return r;
} else if(r->next->next->data==num){
Node * temp= new Node(input);
temp->next=r->next->next;
r->next->next=temp;
return r;
}
r=r->next;
}
cout << "Element Not found\n";
return r;
}
void print(){
print(root);
}
void print( Node* head){
while(head!=nullptr) {
cout<<head->data<<" ";
head=head->next;
}
cout<<endl;
}
};
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=0; cin>>t;
while(t--){
auto size=0; cin>>size;
auto input=0;
implement obj;
for(int i=0; i<size; i++){
cin>>input; // 1 2 3 4 5
obj.insert(input);
}
// Printing Current List
obj.print(); // Output 1 2 3 4 5
// Inserting integer 10 before 1
obj.newNode(10, 1);
obj.print(); // Output 10 1 2 3 4 5
// Inserting integer 15 before 3
obj.newNode(15, 3);
obj.print(); // Output 1 2 15 3 4 5 instead of 10 1 2 15 3 4 5
obj.newNode(10, 1);
obj.print();
obj.newNode(15, 1);
obj.print();
// int before = 0;
// int num; cin>>num;
// while(num-- ){
// cin>>input>>before;
// obj.newNode(input, before);
// }
obj.print();
}
return 0;
}