can anyone solve this please

Consider the following implementation of the node and doubly linked-list:

Extend the class doubly_linked_list by adding the following methods:

*Largest method .This method should return the largest element in a doubly linked-list.

*Delete method. This method should delete the first occurrence of an element (value) from a doubly linked-list.

template <class type>
class node
{
public:
    type info;
    node<type> * next;// next
    node<type> * prev;//back

};

template <class type>
class doubly_linked_list
{
    //data members
private:
    node<type> *head, *tail;
    int length;
public:
    doubly_linked_list()
    {
        head = tail = NULL;
        length = 0;
    }
    bool isEmpty()
    {   // return (head==NULL);
        if (head == NULL)
            return true;
        else
            return false;
    }

    void Append(type e)
    {
        node<type> *newnode = new node<type>;
        newnode->info = e;
        if (isEmpty())
        {
            newnode->next = NULL;
            newnode->prev = NULL;
            head = newnode;
            tail = newnode;
        }
        else
        {
            tail->next = newnode;
            newnode->prev = tail;
            newnode->next = NULL;
            tail = newnode;
        }
        ++length;

    }

    void Display()
    {
        if (isEmpty()) { cout << "The linked list is empty !!!!"; return; }
        cout << "list elements: ";
        node<type> * current = head;
        while (current != NULL)
        {
            cout << current->info << " ";
            current = current->next;
        }
        cout << endl;

    }

    void ReverseDisplay()
    {
        if (isEmpty()) { cout << "The linked list is empty !!!!"; return; }
        cout << "Reverse list elements: ";
        node<type> * current = tail;
        while (current != NULL)
        {
            cout<< current->info<<" ";
            current = current->prev;
        }
        cout << endl;
    }

    void insert(type e, int index)
    {
        if (index< 1 || index>length + 1)
        {
            cout << "Invalid index !!!!"; return;
        }
        else
        {
            node<type> * newnode = new node <type>;
            newnode->info = e;
            if (index == 1)
            {
                newnode->prev = NULL;
                if (isEmpty())
                {
                    newnode->next = NULL;
                    head = tail = newnode;
                }
                else {
                    newnode->next = head;
                    head->prev = newnode;
                    head = newnode;
                }



            }
            else
            {
                node<type> * current = head;
                int i = 1;
                while (i != index - 1)
                {
                    current = current->next;
                    ++i;
                }

                if(current !=tail)
                { 
                current->next->prev = newnode;
                newnode->next = current->next;
                current->next = newnode;
                newnode->prev = current;
                }
                else
                {
                    current->next = newnode;
                    newnode->prev = current;
                    newnode->next = NULL;
                    tail = newnode;
                }

            }





        }
    }

};