Waiting for answer This question has not been answered yet. You can hire a professional tutor to get the answer.
In C++, just write the methods. List's big three: Need to do something in the constructor, and need to handle all the dynamic memory made when adding...
List's big three: Need to do something in the constructor, and need to handle all the dynamic memory made when adding nodes.
PushFront: Add a new node as the new first piece of data. Do NOT add anything before Head.
PopFront: Remove the first piece of data if there is one.
Front: Return the first piece of data.
*Back: Those same three, except to the end. Do NOT add anything after Tail.
Size: How many things.
Clear: Remove all data, leave head and tail.
At: Return data at that position. 0 is first data
Erase: Delete the node at this iterator, if it exists
Insert: Insert data after this iterator. Do not allow inserting after tail!
Begin: Iterator to first data
End: Iterator after last data (remember Unspecified Behavior)
Iterator::GetData: Return the T from this node
Iterator::Next: Move iterator to the next node
Iterator::IsEqual: Are these pointing to the same node?
list.h
#pragma once
template <typename T>
class List
{
struct ListNode
{
ListNode()
{
}
T mData;
ListNode *mPrev;
ListNode *mNext;
};
ListNode *mHead;
ListNode *mTail;
public:
List()
{
// Getting Head and Tail correct is not part of the Big
3. It is hella mega required no matter what.
//mHead = nullptr;
//mTail = nullptr;// bleh. Full of crash.
mHead = new ListNode;
mTail = new ListNode;
mHead->mNext = mTail;
mHead->mPrev = nullptr;
mTail->mPrev = mHead;// This RULES. We always know we
have 2 nodes, so we never have to check for null.
mTail->mNext = nullptr;
}
List(const List & tOther)
{
}
List & operator = (const List & tRHS)
{
}
~List()
{
}
void PushFront(const T &tWhat)
{
}
void PopFront()
{
}
T& Front()
{
}
void PushBack(const T &tWhat)
{
}
void PopBack()
{
}
T& Back()
{
}
int Size() const
{
}
void Clear()
{
}
T& At(int tWhere) const
{
}
///////////////////////////////////////////////////////////////////
// Iterators
class Iterator
{
ListNode *mCurrent;
public:
Iterator(ListNode *tStart)
{
}
T& GetData()
{
}
void Next()// As in "Move to the next item please".
{
}
bool IsEqual(const Iterator &rhs)
{
}
};
Iterator Insert(Iterator tWhere, const T &tWhat)
{
}
Iterator Erase(Iterator tWhat)
{
}
Iterator Begin()
{
// First good data
}
Iterator End()
{
// First Bad data
}
};