You are on page 1of 5

Task 01+02

//To insert at middle


#include <iostream>
using namespace std;
struct Node
{
Node* next;
int data;
};

class List
{
private:
Node* head;
public:
List()
{
head = nullptr;
}
~List()
{
Node* currNode = head;
Node* delNode = NULL;
while (currNode != NULL)
{
delNode = currNode->next;
delete currNode;
currNode = delNode;
}
}
void insertAtBeginning(int value)
{
Node* currNode = new Node;
currNode->next = head;
currNode->data = value;
head = currNode;
}
void insertNodeAtMiddle(int x, int data)
{
Node* currNode = head;
while (currNode && currNode->data != x)
{
currNode = currNode->next;
}
if (currNode)
{
Node* newNode = new Node;
newNode->next = currNode->next;
currNode->next = newNode;
newNode->data = data;
}
else
cout << "Error After Node of Data " << x << endl;
}
void deleteNode(int x)
{
Node* prevNode = NULL;
Node* currNode = head;
while (currNode && currNode->data != x)
{
prevNode = currNode;
currNode = currNode->next;
}
if (currNode)
{
if (prevNode)
{
prevNode->next = currNode->next;
delete currNode;
}
else
{
head = currNode->next;
delete currNode;
}
}

}
void display()
{
Node* currNode = head;
cout << "List:" << endl;
while (currNode != nullptr)
{
cout << currNode->data << " ";
currNode = currNode->next;
}
cout << endl;
}
};
int main()
{
List list;
list.insertAtBeginning(1);
list.insertNodeAtMiddle(1, 4);
list.insertNodeAtMiddle(4, 5);
list.insertNodeAtMiddle(5, 6);
list.display();
list.deleteNode(4);
list.display();
return 0;
}

Task 03
//Inserting in doubly link list
#include <iostream>
using namespace std;

struct Node
{
int data;
Node* next;
Node* prev;
};

class DoublyList
{
private:
Node* head;
public:
DoublyList()
{
head = NULL;
}
~DoublyList()
{
Node* currNode = head;
while (currNode != NULL)
{
Node* delNode = currNode->next;
delete currNode;
currNode = delNode;
}
}
bool isEmpty(){ return head == NULL; }
void insertAtBegining(int data)
{
if ((isEmpty()))
{
head = new Node;
head->data = data;
head->next = NULL;
head->prev = NULL;
}
else
{
Node* currNode = head;
Node* newNode = new Node;
newNode->data = data;
newNode->next = currNode;
currNode->prev = newNode;
head = newNode;
}
}
void insertAtMiddle(int x, int data)
{
Node* currNode = head;
while (currNode && currNode->data != x)
{
currNode = currNode->next;
}
if (currNode)
{
Node* newNode = new Node;
newNode->prev = currNode;
newNode->next = currNode->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
newNode->data = data;
currNode = newNode;
}
else
cout << "Error At Value " << x << endl;
}
void insertAtEnd(int data)
{
Node* newNode = new Node;
newNode->data = data;
newNode->next = nullptr;

if (isEmpty())
{
insertAtBegining(data);
}
else
{
Node* currNode = head;
while (currNode->next != nullptr)
{
currNode = currNode->next;
}
currNode->next = newNode;
newNode->prev = currNode;
}
}

void display()
{
Node* currNode = head;
while (currNode != NULL)
{
cout << currNode->data << " ";
currNode = currNode->next;
}
cout << endl;
}
};
int main()
{
DoublyList dList;
cout << "At Begining" << endl;
dList.insertAtBegining(1);
dList.insertAtBegining(2);
dList.display();
cout << "At Middle" << endl;
dList.insertAtMiddle(2, 5);
dList.display();
cout << "At End" << endl;
dList.insertAtEnd(8);
dList.display();
return 0;
}

You might also like