Answered step by step
Verified Expert Solution
Question
1 Approved Answer
(a) Draw a sketch of the singly-linked list after each step of the following sequence. Append (Red) Append (Green) Prepend (Blue) The sketches should show
(a) Draw a sketch of the singly-linked list after each step of the following sequence.
-
Append (Red)
-
Append (Green)
-
Prepend (Blue)
The sketches should show all pointers involved.
(b) Write two short C++ main functions that each create the above linked list (Hint: each main() will be 4 lines of code).
-
The first main function should use the SinglyLinkedList class defined in:
#pragma once | |
#include | |
template | |
struct Node { | |
T data; | |
Node | |
Node() = delete; // Intentionally no default constructor | |
Node( const T & element ) : data( element ), next( nullptr ) {} | |
}; | |
template | |
class SinglyLinkedList { | |
private: | |
Node | |
Node | |
public: | |
// Constructors | |
SinglyLinkedList(); | |
SinglyLinkedList(const SinglyLinkedList&); | |
SinglyLinkedList& operator=(const SinglyLinkedList&); // assignment operator | |
~SinglyLinkedList(); // destructor | |
// Getters / Setters | |
bool empty(); | |
int size() = delete; // INTENTIONALLY NOT IMPLEMENTED !! | |
void append( const T& ); | |
void prepend( const T& ); | |
void insertAfter( Node | |
void removeAfter( Node | |
void pop_front(); // remove element at front of list | |
T& front(); // return list's front element | |
T& back(); // return list's back element | |
void clear(); | |
}; | |
template | |
SinglyLinkedList | |
template | |
bool SinglyLinkedList | |
return head == nullptr; | |
} | |
template | |
void SinglyLinkedList | |
Node | |
if (head == nullptr) { // List empty | |
head = newNode; | |
tail = newNode; | |
} | |
else{ | |
tail->next = newNode; | |
tail = newNode; | |
} | |
} | |
template | |
void SinglyLinkedList | |
Node | |
if (head == nullptr) { // list empty | |
head = newNode; | |
tail = newNode; | |
} | |
else { | |
newNode->next = head; | |
head = newNode; | |
} | |
} | |
template | |
void SinglyLinkedList | |
// Construct new node | |
Node | |
if (head == nullptr) { // List empty | |
head = newNode; | |
tail = newNode; | |
} else if (curNode == tail) { // Insert after tail | |
tail->next = newNode; | |
tail = newNode; | |
} else { | |
newNode->next = curNode->next; | |
curNode->next = newNode; | |
} | |
} | |
template | |
void SinglyLinkedList | |
if( empty() ) throw std::length_error( "empty list" ); | |
// Special case, remove head | |
if (curNode == nullptr && head != nullptr) { | |
Node | |
head = sucNode; | |
if (sucNode == nullptr) { // Removed last item | |
tail = nullptr; | |
} | |
} | |
else if (curNode->next != nullptr) { | |
Node | |
curNode->next = sucNode; | |
if (sucNode == nullptr) { // Removed tail | |
tail = curNode; | |
} | |
} | |
} | |
template | |
void SinglyLinkedList | |
removeAfter(nullptr); | |
} | |
template | |
T& SinglyLinkedList | |
if( empty() ) throw std::length_error( "empty list" ); | |
return head->data; | |
} | |
template | |
T& SinglyLinkedList | |
if( empty() ) throw std::length_error( "empty list" ); | |
return tail->data; | |
} | |
template | |
void SinglyLinkedList | |
while( !empty() ) | |
pop_front(); | |
} | |
template | |
SinglyLinkedList | |
clear(); | |
} | |
template | |
SinglyLinkedList | |
// Walk the original list adding copies of the elements to this list maintaining order | |
for( Node | |
append( position->data ); | |
} | |
} | |
template | |
SinglyLinkedList | |
if( this != &rhs ) // avoid self assignment | |
{ | |
// Release the contents of this list first | |
clear(); // An optimization might be possible by reusing already allocated nodes | |
// Walk the right hand side list adding copies of the elements to this list maintaining order | |
for( Node | |
append( position->data ); | |
} | |
} | |
return *this; | |
} |
2. The second main function should use the C++ Standard Librarys singly linked list: std::forward_list
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started