#include <iostream>
using namespace std;
class LinkedList
{
struct Node
{
int item;
Node*next;
};
Node*first;
Node*last;
int length;
public:
LinkedList()
{
first =last=NULL;
length=0;
}
bool IsEmpty()
{
return length==0 ;
}
void InsertFirst (int element)
{
Node*newNode=new Node;
newNode->item=element;
if (IsEmpty())
{
first=last=newNode;
newNode->next =NULL;
}
else
{
newNode->next =first;
first=newNode;
}
length++;
}
void InsertLast(int element)
{
Node*newNode=new Node;
newNode->item=element;
if (IsEmpty())
{
first=last=newNode;
newNode->next =NULL;
}
else
{
last->next=newNode;
newNode->next=NULL;
}
length++;
}
void insertAtpos(int pos, int element)
{
if (pos<0||pos>length)
{
cout << "Invalid position Out of range"<<endl;
}
else
{
Node*newNode=new Node;
newNode->item =element;
if (pos==0)
{
InsertFirst(element);
}
else if (pos==length)
{
InsertLast(element);
}
else
{
Node*current = first;
for (int i = 0; i < pos - 1; i++)
{
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
length++;
}
}
int removeAtFirst()
{
if (IsEmpty())
{
cout << "List is empty." << endl;
}
else if (length==1)
{
delete first;
first=last=NULL;
length--;
}
else
{
Node*curr =first->next;
Node*prev=first;
while (curr!=last)
{
prev=curr;
curr=curr->next;
}
delete curr;
prev->next =NULL;
last=prev;
length--;
}
}
void removeAtLast()
{
if (length==0)
{
return;
}
else if (length==1)
{
delete first;
last=first=NULL;
length--;
}
else
{
Node*curr=first->next;
Node*prev=first ;
while (curr != last)
{
prev=curr;
curr=curr->next;
}
delete curr;
prev->next=NULL;
last=prev;
length --;
}
}
void removeAtPos(int pos)
{
if (pos < 0 || pos >= length)
{
cout << "Invalid position. Out of range." << endl;
return;
}
if (pos == 0)
{
removeAtFirst();
return;
}
Node* current = first;
for (int i = 0; i < pos - 1; i++)
{
current = current->next;
}
Node* temp = current->next;
current->next = temp->next;
if (temp == last)
{
last = current;
}
delete temp;
length--;
}
bool search(int element)
{
Node* current = first;
while (current != NULL)
{
if (current->item == element)
{
cout << "Element found in the list." << endl;
return true;
}
current = current->next;
}
cout << "Element not found in the list." << endl;
return false;
}
void Display()
{
Node* current = first;
while (current!= NULL) // Keep looping until we reach the end of the list
{
cout << current->item << " ";
current = current->next;
}
cout << endl;
}
};
int main(int argc, char const *argv[])
{
LinkedList ibrahem;
ibrahem.InsertFirst(15);
ibrahem.InsertFirst(20);
ibrahem.InsertLast(25);
ibrahem.insertAtpos(1,100);
ibrahem.removeAtLast();
ibrahem.search(100);
ibrahem.Display();
return 0;
}