C++ как реверсировать шаблон связанного списка, чтобы напечатать его в обратном порядке?
<pre>ifndef CARGO_H #define CARGO_H #include "stdafx.h" #include <iomanip> #include <string> #include <iostream> #include <list> using namespace std; template <class T> class LinkedList { private: struct ListNode { T value; struct ListNode *next; }; ListNode *head; public: LinkedList(); ~LinkedList(); LinkedList(T); void appendNode(T newValue); void insertNode(T); void deleteNode(T); void print() const; void reverse(LinkedList* head); }; template <class T> LinkedList<T>::LinkedList() { head = nullptr; } template <class T> LinkedList<T>::LinkedList(T) { head = NULL; nullptr = head; } template <class T> LinkedList<T>::~LinkedList() { ListNode *nodePtr; ListNode *nextNode; nodePtr = head; while (nodePtr != nullptr) { nextNode = nodePtr->next; delete nodePtr; nodePtr = nextNode; } } template <class T> void LinkedList<T>::appendNode(T newValue) { ListNode *newNode; ListNode *nodePtr; newNode = new ListNode; newNode->value = newValue; newNode->next = nullptr; if (!head) head = newNode; else { nodePtr = head; while (nodePtr->next) nodePtr = nodePtr->next; nodePtr->next = newNode; } } template <class T> void LinkedList<T>::insertNode(T newValue) { ListNode *newNode; ListNode *nodePtr; ListNode *previousNode = nullptr; newNode = new ListNode; newNode->value = num; if (!head) { head = newNode; newNode->next = nullPtr; } else { nodePtr = head; previousNode = nullPtr while (nodePtr != nullptr && nodePtr->value < num) { previousNode = nodePtr; nodePtr = nodePtr->next; } if (previousNode == nullptr) { head = newNode; newNode->next = nodePtr; } else { previousNode->next = newNode; newNode->next = nodePtr; } } } template <class T> void LinkedList<T>::deleteNode(T searchValue) { ListNode *nodePtr; ListNode *previousNode; if (!head) return; if (head->value == num) { nodePtr = head->next; delete head; head = nodePtr; } else { nodePtr = head; while (nodePtr != nullptr && nodePtr->value != num) { previouseNode = nodePtr; nodePtr = nodePtr->next; } if (nodePtr) { previousNode->next = nodePtr->next delete nodePtr; } } } template <class T> void LinkedList<T>::print() const { ListNode *nodePtr; nodePtr = head; while (nodePtr) { cout << nodePtr->value << endl; nodePtr = nodePtr->next; } } template<class T> void LinkedList<T>::reverse(LinkedList* head) { reverse1(LinkedList* head) //This is my reverse function that calls the //other reverse function } template<class T> reverse1(LinkedList* head) //This is my reverse Functions { LinkedList* ptr = NULL; ListNode* next; while (head) { next = head->next; head->next = ptr; ptr = head; head = next; } return ptr; }
<pre> #include "stdafx.h" //This is my main function #include "LinkedList.h" #include "CargoShip.h" int main() { LinkedList<CargoShip> list; // I am using a separate class to insert data LinkedList<CargoShip>* head = NULL; CargoShip a(1997, "Eminem"); CargoShip b(2017, "Dr Dre"); CargoShip c(2015, "SnoopDogg"); CargoShip d(1900, "NWA"); CargoShip e(1500, "50 Cent"); list.appendNode(a); list.appendNode(b); list.appendNode(c); list.appendNode(d); list.appendNode(e); LinkedList<CargoShip> list2; list2.appendNode(a); list2.appendNode(b); list2.appendNode(c); list2.appendNode(d); list2.appendNode(e); list2.print(); list2.reverse(head); list2.print(); system("PAUSE"); return 0;
Что я уже пробовал:
Я работаю над этим уже несколько часов и чувствую, что действительно близок к этому, но совершаю глупую ошибку. Спасибо Вам за помощь!:)
Richard MacCutchan
В чем именно заключается проблема?
Member 13484972
Обратная функция не будет печатать список в обратном порядке.Я получаю ошибки "класса LinkedList: использования класса шаблон требуется список аргументов шаблон "
и ошибка
"Предполагается, что отсутствует спецификатор типа int"
Richard MacCutchan
Почему именно вы используете шаблоны здесь, поскольку единственное место, которое вы используете, находится внутри объекта узла? Таким образом, класс Node должен использовать шаблон, и LinkedList больше не будет нуждаться в них. Это значительно упростило бы ваш код.
И почему у вас есть две обратные функции, когда одна должна выполнять эту работу?
И, наконец, где происходит это сообщение об ошибке?
Member 13484972
Более того, я не знаю, является ли моя обратная функция технически правильной. Я работаю над этим уже несколько часов и, кажется, не могу понять, как это сделать или как реализовать в своей жизни. main.cpp так что это работает.
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.