1) Унаследовались от std::iterator вы неверно. Второй параметр это тип который должен получится после разыменования. Если оператор * возвращает Т, то ставьте Т параметром.
2)
MyIterator подтягивает из std::iterator определенные в нем операторы (* и ->), 
Какие определённые операторы? std::iterator определяет несколько алиасов типов, вот и всё.
Вам нужно:
а) Хранить в итераторе указатель на ноду.
б) Операторы ++ и -- переводят указатель на следующую/предыдущую ноду
в) Операторы * и -> обращаются к данным в текущей ноде.
Как-то так:
template <typename T>
struct Node
{
    T data;
    Node* next;
    Node* prev;
};
template <typename T>
class list_iterator : public std::iterator<std::bidirectional_iterator_tag, T> 
{
    private:
    
    Node<T>* current;
    
    public:
    
    list_iterator& operator++()
    {
        current = current->next;
        return *this;
    }
    
    T& operator*()
    {
        return current->data;   
    }
};