I need to fill-in //TODO\'s in .cpp file and in .h file Could someone help me at least with few of them to give me an idea how deal with it. ***SinglyLinkedList.cpp #include #include #include \"SinglyLinkedList.h\" void test_constructor() { SinglyLinkedList lst = {100, 200, 300, 400, 500}; assert(*lst.at(0) == 100); assert(*lst.at(1) == 200); assert(*lst.at(2) == 300); assert(*lst.at(3) == 400); assert(*lst.at(4) == 500); assert(lst.size() == 5); } void test_remove() { SinglyLinkedList lst = {100, 200, 300, 400, 500}; lst.remove(2); assert(*lst.at(0) == 100); assert(*lst.at(1) == 200); assert(*lst.at(2) == 400); assert(*lst.at(3) == 500); assert(lst.size() == 4); } void test_insert() { // TODO } void test_push_back() { // TODO } void test_push_front() { // TODO } void test_append() { // TODO } void test_sum() { // TODO } int main() { test_constructor(); test_remove(); test_insert(); test_push_back(); test_push_front(); test_append(); test_sum(); } ***SinglyLinkedList.h #include #include template class SinglyLinkedList { // Nested class representing the nodes in the list. class SinglyLinkedListNode { public: // The value stored in this node. T value; // The next node in the sequence. SinglyLinkedListNode *next; SinglyLinkedListNode(T value) : value(value), next(nullptr) {} SinglyLinkedListNode(T value, SinglyLinkedListNode *next) : value(value), next(next) {} // Return the size (length) of the linked list. std::size_t size(); }; SinglyLinkedListNode *head; SinglyLinkedListNode *tail; public: // Constructs a new SinglyLinkedList from an initializer_list of type T[]. // This is mostly for convenience, especially when testing. SinglyLinkedList(std::initializer_list items) : head(nullptr), tail(nullptr) { if (items.size() == 0) { return; } // initializer_lists were designed to be used iteratively, // so thats what we do. // Can you think of how to write this recursively? auto it = items.begin(); while (it != items.end()) { this->push_back(*it++); } } // Return a pointer to the value at the given index. // If the index is larger than the size of the list, // return a nullptr. // // ASIDE: We will cover exceptions later. T* at(std::size_t i); // Pushes a new node onto the back of the list. void push_back(T value); // Pushes a new node onto the front of the list. void push_front(T value); // Return the size (length) of the linked list. std::size_t size(); // Remove the specified node from the list. void remove(std::size_t i); // Insert the value at the index. void insert(std::size_t i, T value); // Append the given list to this one. void append(SinglyLinkedList list); }; template T* SinglyLinkedList::at(std::size_t i) { // TODO } template void SinglyLinkedList::push_back(T value) { // TODO // Make sure that this is a O(1) operation! } template void SinglyLinkedList::push_front(T value) { // TODO // Make sure that this is a O(1) operation! } template void SinglyLinkedList::remove(std::size_t i) { // TODO // Don\'t forget to not only unlink the node, b.