Я пытаюсь дать свой общий класс списка обратную функцию. По какой-то причине мой алгоритм не работает, когда я его тестирую. Я подумал, что это имеет смысл: поменяйте указатели на первый и последний узлы списка, затем перейдите в список и для каждого узла поменяйте указатели на предыдущий и следующий узлы.Реверсирование родового двусвязного списка в C++
Прогуляйтесь со мной, ребята. Я пытаюсь получить некоторую практику с общим программированием. Научите меня пуристам пустого С ++.
Вот функция подкачки:
template <class T> void swap(T* a, T* b) {
T* tempPtr = a;
a = b;
b = tempPtr;
}
Вот обратная функция:
template <class T> void List<T>::reverse() {
if (size > 1) {
swap(firstNodePtr, lastNodePtr);
node* curNodePtr = firstNodePtr;
while (curNodePtr != NULL) {
swap(curNodePtr->prevNodePtr, curNodePtr->nextNodePtr);
curNodePtr = curNodePtr->nextNodePtr;
}
}
}
Вот класс, его членов и прототипов функций:
template <class T> class List {
public:
List();
~List();
void push_back(T);
void push_front(T);
T get_at(unsigned);
unsigned get_size();
void reverse();
private:
struct node {
T val;
node* prevNodePtr;
node* nextNodePtr;
};
node* firstNodePtr;
node* lastNodePtr;
unsigned size;
};
Альтернативным методом является создание нового списка путем «нажатия» узлов в том порядке, в котором вы их «поп». Затем сделайте указатель старой головы указателем на новый список. –