Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I need to fill-in //TODO\'s in .cpp file and in .h file Could someone help me at

ID: 3800016 • Letter: I

Question

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 <assert.h>
#include <iostream>
#include "SinglyLinkedList.h"
void test_constructor() {
SinglyLinkedList<int> 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<int> 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 <stddef.h>
#include <initializer_list>
template <class T>
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<T> 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<T> list);
};
template <class T>
T* SinglyLinkedList<T>::at(std::size_t i) {
// TODO
}
template <class T>
void SinglyLinkedList<T>::push_back(T value) {
// TODO
// Make sure that this is a O(1) operation!
}
template <class T>
void SinglyLinkedList<T>::push_front(T value) {
// TODO
// Make sure that this is a O(1) operation!
}
template <class T>
void SinglyLinkedList<T>::remove(std::size_t i) {
// TODO
// Don't forget to not only unlink the node, but to delete the memory.
}
template <class T>
void SinglyLinkedList<T>::insert(std::size_t i, T value) {
// TODO
// Don't forget to not only unlink the node, but to delete the memory.
}
template <class T>
void SinglyLinkedList<T>::append(SinglyLinkedList<T> list) {
// TODO
}
template <class T>
std::size_t SinglyLinkedList<T>::size() {
if (this->head == nullptr) {
return 0;
} else {
return this->head->size();
}
}
template <class T>
std::size_t SinglyLinkedList<T>::SinglyLinkedListNode::size() {
if (this == nullptr) {
return 0;
} else if (this->next == nullptr) {
return 1;
} else {
return 1 + this->next->size();
}
}
// Takes a reference to a list of integers as an argument,
// and returns the sum of the items in the list.
long sum(const SinglyLinkedList<int>& list) {
// TODO
}

Explanation / Answer

#include<iostream>

#include<cstdio>

#include<cstdlib>

struct node

{

    int info;

    struct node *next;

}*start;

class SingleLinkedList

{

    public:

        node* create_node(int);

        void insert_begin();

        void insert_pos();

        void insert_last();

        void delete_pos();

        void sort();

        void search();

        void update();

        void reverse();

        void display();

        SingleLinkedList()

        {

            start = NULL;

        }

};

void main()

{

    int choice, nodes, element, position, i;

    SingleLinkedList sl;

    start = NULL;

    while (1)

    {

        cout<<endl<<"---------------------------------"<<endl;

        cout<<endl<<"Operations on singly linked list"<<endl;

        cout<<endl<<"---------------------------------"<<endl;

        cout<<"1.Insert Node at beginning"<<endl;

        cout<<"2.Insert node at last"<<endl;

        cout<<"3.Insert node at position"<<endl;

        cout<<"4.Sort Link List"<<endl;

        cout<<"5.Delete a Particular Node"<<endl;

        cout<<"6.Update Node Value"<<endl;

        cout<<"7.Search Element"<<endl;

        cout<<"8.Display Linked List"<<endl;

        cout<<"9.Reverse Linked List "<<endl;

        cout<<"10.Exit "<<endl;

        cout<<"Enter your choice : ";

        cin>>choice;

        switch(choice)

        {

        case 1:

            cout<<"Inserting Node at Beginning: "<<endl;

            sl.insert_begin();

            cout<<endl;

            break;

        case 2:

            cout<<"Inserting Node at Last: "<<endl;

            sl.insert_last();

            cout<<endl;

            break;

      case 3:

            cout<<"Inserting Node at a given position:"<<endl;

            sl.insert_pos();

            cout<<endl;

            break;

        case 4:

            cout<<"Sort Link List: "<<endl;

            sl.sort();

            cout<<endl;

            break;

        case 5:

            cout<<"Delete a particular node: "<<endl;

            sl.delete_pos();

            break;

        case 6:

            cout<<"Update Node Value:"<<endl;

            sl.update();

            cout<<endl;

            break;

        case 7:

            cout<<"Search element in Link List: "<<endl;

            sl.search();

            cout<<endl;

            break;

        case 8:

            cout<<"Display elements of link list"<<endl;

            sl.display();

            cout<<endl;

            break;

        case 9:

            cout<<"Reverse elements of Link List"<<endl;

            sl.reverse();

            cout<<endl;

            break;

        case 10:

            cout<<"Exiting..."<<endl;

            exit(1);

            break;

        default:

            cout<<"Wrong choice"<<endl;

        }

    }

}

node *SingleLinkedList::create_node(int value)

{

    struct node *temp, *s;

    temp = new(struct node);

    if (temp == NULL)

    {

      cout<<"Memory not allocated "<<endl;

        return 0;

    }

    else

    {

        temp->info = value;

        temp->next = NULL;    

        return temp;

    }

}

void SingleLinkedList::insert_begin()

{

    int value;

    cout<<"Enter the value to be inserted: ";

    cin>>value;

    struct node *temp, *p;

    temp = create_node(value);

    if (start == NULL)

    {

        start = temp;

        start->next = NULL;         

    }

    else

    {

        p = start;

        start = temp;

        start->next = p;

    }

    cout<<"Element Inserted at beginning"<<endl;

}

void SingleLinkedList::insert_last()

{

    int value;

    cout<<"Enter the value to be inserted: ";

    cin>>value;

    struct node *temp, *s;

    temp = create_node(value);

    s = start;

    while (s->next != NULL)

    {        

        s = s->next;       

    }

    temp->next = NULL;

    s->next = temp;

    cout<<"Element Inserted at last"<<endl;

}

void SingleLinkedList::insert_pos()

{

    int value, pos, counter = 0;

    cout<<"Enter the value to be inserted: ";

    cin>>value;

    struct node *temp, *s, *ptr;

    temp = create_node(value);

    cout<<"Enter the postion at which node to be inserted: ";

    cin>>pos;

    int i;

    s = start;

    while (s != NULL)

    {

        s = s->next;

        counter++;

    }

    if (pos == 1)

    {

        if (start == NULL)

        {

            start = temp;

            start->next = NULL;

        }

        else

        {

            ptr = start;

            start = temp;

            start->next = ptr;

        }

    }

    else if (pos > 1 && pos <= counter)

    {

        s = start;

        for (i = 1; i < pos; i++)

        {

            ptr = s;

            s = s->next;

        }

        ptr->next = temp;

        temp->next = s;

    }

    else

    {

        cout<<"Positon out of range"<<endl;

    }

}

void SingleLinkedList::sort()

{

    struct node *ptr, *s;

    int value;

    if (start == NULL)

    {

        cout<<"The List is empty"<<endl;

        return;

    }

    ptr = start;

    while (ptr != NULL)

    {

        for (s = ptr->next;s !=NULL;s = s->next)

        {

            if (ptr->info > s->info)

            {

                value = ptr->info;

                ptr->info = s->info;

                s->info = value;

            }

        }

        ptr = ptr->next;

    }

}

void SingleLinkedList::delete_pos()

{

    int pos, i, counter = 0;

    if (start == NULL)

    {

        cout<<"List is empty"<<endl;

        return;

    }

    cout<<"Enter the position of value to be deleted: ";

    cin>>pos;

    struct node *s, *ptr;

    s = start;

    if (pos == 1)

    {

        start = s->next;

    }

    else

    {

        while (s != NULL)

        {

            s = s->next;

            counter++;

        }

        if (pos > 0 && pos <= counter)

        {

            s = start;

            for (i = 1;i < pos;i++)

            {

                ptr = s;

                s = s->next;

            }

            ptr->next = s->next;

        }

        else

        {

            cout<<"Position out of range"<<endl;

        }

        free(s);

        cout<<"Element Deleted"<<endl;

    }

}

void SingleLinkedList::update()

{

    int value, pos, i;

    if (start == NULL)

    {

        cout<<"List is empty"<<endl;

        return;

    }

    cout<<"Enter the node postion to be updated: ";

    cin>>pos;

    cout<<"Enter the new value: ";

    cin>>value;

    struct node *s, *ptr;

    s = start;

    if (pos == 1)

    {

        start->info = value;

    }

    else

    {

        for (i = 0;i < pos - 1;i++)

        {

            if (s == NULL)

            {

                cout<<"There are less than "<<pos<<" elements";

                return;

            }

            s = s->next;

        }

        s->info = value;

    }

    cout<<"Node Updated"<<endl;

}

void SingleLinkedList::search()

{

    int value, pos = 0;

    bool flag = false;

    if (start == NULL)

    {

        cout<<"List is empty"<<endl;

        return;

    }

    cout<<"Enter the value to be searched: ";

    cin>>value;

    struct node *s;

    s = start;

    while (s != NULL)

    {

        pos++;

        if (s->info == value)

        {

            flag = true;

            cout<<"Element "<<value<<" is found at position "<<pos<<endl;

        }

        s = s->next;

    }

    if (!flag)

        cout<<"Element "<<value<<" not found in the list"<<endl;

}

void SingleLinkedList::reverse()

{

    struct node *ptr1, *ptr2, *ptr3;

    if (start == NULL)

    {

        cout<<"List is empty"<<endl;

        return;

    }

    if (start->next == NULL)

    {

        return;

    }

    ptr1 = start;

    ptr2 = ptr1->next;

    ptr3 = ptr2->next;

    ptr1->next = NULL;

    ptr2->next = ptr1;

    while (ptr3 != NULL)

    {

        ptr1 = ptr2;

        ptr2 = ptr3;

        ptr3 = ptr3->next;

      ptr2->next = ptr1;        

    }

    start = ptr2;

}

void SingleLinkedList::display()

{

    struct node *temp;

    if (start == NULL)

    {

        cout<<"The List is Empty"<<endl;

        return;

    }

    temp = start;

    cout<<"Elements of list are: "<<endl;

    while (temp != NULL)

    {

        cout<<temp->info<<"->";

        temp = temp->next;

    }

    cout<<"NULL"<<endl;

}

please implement Like this.if any Doubts forward to me