С++, сортировка двусвязного списка перенаправлением указателей

Нужна помощь в написании кода. Есть двусвязный список. Нужно сделать сортировку не трогая данные, а перенаправляя указатели. Задачу немного усложнили. Узел описан не в структуре, а в шаблонном классе, то есть к полям напрямую нет доступа, но есть геттеры и сеттеры

template<class T>
class Node
{
    T data;
    Node<T>* next = nullptr;
    Node<T>* prev = nullptr;
public:
    Node(T val);
    Node<T>* getNext()const;
    Node<T>* getPrev()const;
    T getData()const;
    void setNext(Node<T>* val);
    void setPrev(Node<T>* val);
    void setData(T val);

};

Какие и сколько нужно дополнительных переменных для реализации данной задачи? И есть ли материал какой-то, чтобы почитать? Со структурой материала очень много, а вот с классом ничего не нашел. Да и с перенаправлением указателей не густо информации. Чаще просто свопают дату(

Только к самим данным внутри data нет.
Которые и не нужны.

Только сравнивать надо, но видимо предполагается, что все используемые типы для T поддерживают >, < и т.д.


Это не имеет отношения к шаблонам.

Тут есть поля

просто они приватные и недоступны снаружи.

А так

a.setNext(b.getPrev());

это почти то же самое, что

a.next = b.prev;

Думаю достаточно просто нарисовать список и подумать что надо сделать со связями, чтобы поменять местами два элемента.
А дальше просто взять нужный алгоритм сортировки и заменить обычную перестановку значений этими действиями.