top of page
Data Structures

//////////////////////////////

// Singly linked list

//////////////////////////////

template<typename T>

class SingleLinkList

{

private:

  struct Node

  {

        Node* next;

        T data;

    };

    Node* head;

    int size;

public:

    SingleLinkList() : head(nullptr), size(0) {};

    void addHead(const T& _data)

    {

        node* tmp = new node;

        tmp->data = _data;

        tmp->next = head;

        head = tmp;

        ++Size;

    };

    void remove(Iterator<T>& index)

    {

        Node* tmp = head;

        Node* tmp2 = head;

        if (index.looker == nullptr)

            return;

        if (index.looker == head)

        {

            head = head->next;

            index.looker = head;

            index.headList = head;

            delete tmp;

            --Size;

        }

        else

        {

            for (int i = 0; i < Size - 1; i++)

            {

                if (tmp == index.looker)

                    break;

                else

                {

                    tmp2 = tmp;

                    tmp = tmp->next;

                }

            }

            tmp2->next = tmp->next;

            delete tmp;

            --Size;

    };

    void clear()

    {

        Node* tmp = head;

        while (head)

        {

            head = head->next;

            delete tmp;

            tmp = head;

        }

        Size = 0;

    };

};

bottom of page