Question: Hey. I wrote a templated linked list, but I need a default constructor, copy constructor, equality operator and assignment operator written for it. Can you

Hey. I wrote a templated linked list, but I need a default constructor, copy constructor, equality operator and assignment operator written for it. Can you just add these elements to the code? Thank you!

Hey. I wrote a templated linked list, but I need a default

constructor, copy constructor, equality operator and assignment operator written for it. Can

you just add these elements to the code? Thank you! bool RemoveTail()

bool RemoveTail()

{

if (tail == nullptr)

return false;

Node *ptr = tail;

if(tail->prev != nullptr)

{

tail = tail->prev;

tail->next = nullptr;

}

else

{

tail = nullptr;

head = nullptr;

}

delete ptr;

ptr = nullptr;

length--;

return true;

}

bool RemoveAt(const unsigned int index)

{

if(index >= length || index

return false;

unsigned int ctr = 0;

Node *ptr = head;

while (ptr != nullptr && ctr

{

ptr = ptr->next;

ctr++;

}

if (ptr == nullptr)

{

return false;

}

else

{

if(ptr->prev != nullptr)

ptr->prev->next = ptr->next;

if(ptr->next != nullptr)

ptr->next->prev = ptr->prev;

delete ptr;

ptr = nullptr;

length--;

return true;

}

}

void AddNodesHead(const T arr[], const unsigned int count)

{

for ( int i = count - 1; i >= 0; i--)

{

AddHead(arr[i]);

length++;

}

}

void AddNodesTail(const T arr[], const unsigned int count)

{

for (unsigned int i = 0; i

{

AddTail(arr[i]);

length++;

}

}

void InsertBefore(Node *node, const T data)

{

Node *front = head, *back = tail;

Node *ptr;

if (front == nullptr && back == nullptr)

{

AddHead(data);

return;

}

if (node == nullptr)

return;

while (front

{

if (front == node)

{

ptr = front;

break;

}

else if (back == node)

{

ptr = back;

break;

}

front = front->next;

back = back->prev;

}

Node *new_node = new Node;

new_node->data = data;

ptr->prev->next = new_node;

new_node->prev = ptr->prev;

new_node->next = ptr;

ptr->prev = new_node;

length++;

}

void InsertAfter(Node *node, const T data)

{

Node *front = head, *back = tail;

Node *ptr = nullptr;

if (front == nullptr && back == nullptr)

AddHead(data);

if (node == nullptr)

return;

while (front

{

if (front == node)

{

ptr = front;

break;

}

else if (back == node)

{

ptr = back;

break;

}

front = front->next;

back = back->prev;

}

Node *new_node = new Node;

new_node->data = data;

ptr->next->prev = new_node;

new_node->next = ptr->next;

new_node->prev = ptr;

ptr->next = new_node;

length++;

}

Node* GetNode(const unsigned int index)

{

Node *ptr = head;

for (unsigned int i = 0; i

{

ptr = ptr->next;

}

return ptr;

}

Node* Find(const T val)

{

Node *front = head, *back = tail;

Node *ptr = nullptr;

if (front == nullptr && back == nullptr)

{

return nullptr;

}

while (front

{

if (front->data == val)

{

ptr = front;

break;

}

else if (back->data == val)

{

ptr = back;

break;

}

front = front->next;

back = back->prev;

}

return ptr;

}

void InsertAt(const T data, const unsigned int index)

{

Node *ptr = head;

if (index > length)

return;

else if (index == 0)

AddHead(data);

else if (index == length - 1)

AddTail(data);

else

{

for (unsigned int i = 0; i

{

ptr = ptr->next;

}

Node *new_node = new Node;

ptr->prev->next = new_node;

new_node->prev = ptr->prev;

new_node->next = ptr;

ptr->prev = new_node;

}

}

void FindAll(std::vector& nodes, const T search_val)

{

Node *ptr = head;

while(ptr != nullptr)

{

if(ptr->data == search_val)

nodes.push_back(ptr);

ptr = ptr->next;

}

}

T& operator[](const unsigned int index)

{

Node *ptr = head;

for (unsigned int i = 0; i

{

ptr = ptr->next;

}

return ptr->data;

}

~LinkedList() {

while(head != NULL) {

Node* temp = head;

head = head->next;

delete temp;

}

}

private:

unsigned int length;

Node* head, *tail;

};

#endif

#ifndef LINKEDLIST_H #define LINKEDLIST_H #include #include template class LinkedList public: class Node public: Node() this->next = this->prev = nullptr; T data; Node *next, *prev LinkedList0 head = tail = nullptr; length = 0; void AddHead(const T data) if (head nullptr) head = new Node; head->data = data; tail = head; else Node *new node = new Node; new-node->data = data; new-node->next = head; head-prev- new.node head = head->prev; length++i #ifndef LINKEDLIST_H #define LINKEDLIST_H #include #include template class LinkedList public: class Node public: Node() this->next = this->prev = nullptr; T data; Node *next, *prev LinkedList0 head = tail = nullptr; length = 0; void AddHead(const T data) if (head nullptr) head = new Node; head->data = data; tail = head; else Node *new node = new Node; new-node->data = data; new-node->next = head; head-prev- new.node head = head->prev; length++i

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!