Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

//INSTRUCTION: //It helps to first create if-then-else structure to fill in later. //- Make sure PURPOSE and PARAMETER comments are given in detail // Add

//INSTRUCTION:

//It helps to first create if-then-else structure to fill in later.

//- Make sure PURPOSE and PARAMETER comments are given in detail

// Add sufficient comments to your code body to describe what it does.

// - Make sure all if-then-else are commented describing which case it is

// - Make sure all local variables are described fully with their purposes

//Complete the TODO parts.

// ====================================================

//Complier: g++

//File type: linkedList.cpp implementation file

//=====================================================

#include

#include"linkedlist.h"

using namespace std;

//cunstructor that initializes an empty list

LinkedList::LinkedList() {

front = nullptr;

rear = nullptr;

count = 0;

}

/**

* @brief Destructor to destroy all nodes and release memory

*/

LinkedList::~LinkedList() {

Node *p, *q;

p = front;

while (p != nullptr) {

q = p->next;

delete p;

p = q;

}

}

/**

* @brief Purpose: Checks if the list is empty

* @return true if the list is empty, false otherwise

*/

bool LinkedList::isEmpty() const {

// TODO: Add code here

return count == 0;

}

/**

* @brief Get the number of nodes in the list

* @return int The number of nodes in the list

*/

int LinkedList::length() const{

return count;

}

/**

* @brief Convert the list to a string

*

*/

string LinkedList::toString() {

string str = "[";

Node *ptr = front;

if (ptr != nullptr) {

// Head node is not preceded by separator

str += to_string(ptr->val);

ptr = ptr->next;

}

while (ptr != nullptr) {

str += ", " + to_string(ptr->val);

ptr = ptr->next;

}

str += "]";

return str;

}

/**

* @brief Displays the contents of the list

*/

void LinkedList::displayAll() {

cout << toString() << endl;

}

//Add a node to the end of the list

void LinkedList::addRear(T val) {

Node *p = new Node;

p->val = val;

p->next = nullptr;

if (isEmpty()) {

front = p;

}

else {

rear->next = p;

}

rear = p;

count++;

// consider the two cases of whether the list was empty

}

//Add a node to the front of the list

void LinkedList::addFront(T val) {

Node *p = new Node;

p->val = val;

p->next = front;

if (isEmpty()) {

rear = p;

}

front = p;

count++;

// consider the two cases of whether the list was empty

}

//Delete the first node of the list

bool LinkedList::deleteFront(T &OldNum) {

if (isEmpty()) {

return false;

}

Node *p = front;

OldNum = p->val;

front = front->next;

if (front == nullptr) {

rear = nullptr;

}

delete p;

count--;

return true;

// consider if the list was empty and return false if the list is empty

// consider the special case of deleting the only node in the list

}

//Delete the last node of the list

bool LinkedList::deleteRear(T &OldNum) {

if (isEmpty()) {

return false;

}

Node *p = rear;

OldNum = p->val;

if (front == rear) {

front = rear = nullptr;

}

else {

Node *q = front;

while (q->next != rear) {

q = q->next;

}

rear = q;

q->next = nullptr;

}

delete p;

count--;

return true;

// consider if the list was empty and return false if the list is empty

// consider the special case of deleting the only node in the list

}

/* --- harder ones for test 2 and 3 -- */

/**

* @brief Delete a node at a given position from the list. The

* node at position pos is deleted and the value of the deleted node is returned in val.

* The valid range of pos is 1 to count. pos = 1 is the first node, and pos = count is the last node.

* @param pos: position of the node to be deleted

* @param val: it is set to the value of the node to be deleted

* @return true: if the node was deleted successfully

* @return false: if the node was not deleted successfully because the position was out of range

*/

bool LinkedList::deleteAt(int pos, T &val) {

//TODO: Add code here

// check if the pos is valid first, then move the ptr to the rigth positon

// consider the special case of deleting the first node and the last node

// Do not forget to set value.

}

/**

* @brief Insert a value at a specified position in the list. The valid pos is in the range of 1 to count+1.

* The value will be inserted before the node at the specified position. if pos = 1, the value will be inserted

* at the front of the list. if pos = count+1, the value will be inserted at the rear of the list.

* @param pos: position to insert the value at.

* @param val: value to insert.

* @return true: if the value was inserted.

* @return false: if the value was not inserted because pos is out of the range.

*/

bool LinkedList::insertAt(int pos, T val) {

//TODO: Add code here

// check if the pos is valid first, then move the ptr to the rigth positon

// consider the special case of inserting the first node and the last node

}

/**

* @brief Copy Constructor to allow pass by value and return by value of a LinkedList

* @param other LinkedList to be copied

*/

LinkedList::LinkedList(const LinkedList &other) {

// Start with an empty list

front = nullptr;

rear = nullptr;

count = 0;

// TODO: Add code here. Interate through the other list and add a new node to this list

// for each node in the other list. The new node should have the same value as the other node.

}

/**

* @brief Overloading of = (returns a reference to a LinkedList)

* @param other LinkedList to be copied

* @return reference to a LinkedList

*/

LinkedList &LinkedList::operator=(const LinkedList &other) {

if(this != &other) { // check if the same object

// Delete all nodes in this list

// TODO: Add code here

// Interate through the other list and add a new node to this list

// Be sure to set the front and rear pointers to the correct values

// Be sure to set the count to the correct value

// TODO: Add code here

}

return *this;

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Machine Learning And Knowledge Discovery In Databases European Conference Ecml Pkdd 2017 Skopje Macedonia September 18 22 2017 Proceedings Part 3 Lnai 10536

Authors: Yasemin Altun ,Kamalika Das ,Taneli Mielikainen ,Donato Malerba ,Jerzy Stefanowski ,Jesse Read ,Marinka Zitnik ,Michelangelo Ceci ,Saso Dzeroski

1st Edition

3319712721, 978-3319712727

More Books

Students also viewed these Databases questions

Question

Describe the job youd like to be doing five years from now.

Answered: 1 week ago

Question

So what disadvantages have you witnessed? (specific)

Answered: 1 week ago