#include struct ListNode { int value; ListNode *next; }; class List { public: List(); ~List(); void Append(int newValue); void Reverse(); // Reverse list void Print(); private: void AppendNode(ListNode *newNode); ListNode *head; }; List::List() : head(0L) {} List::~List() { ListNode *cur = head; while (cur != 0L) // 0L is preferred to using NULL, even better // is to use nullptr but not all compilers support it. { cur = cur->next; delete head; head = cur; } } void List::Append(int newValue) { ListNode *newNode = new ListNode; newNode->value = newValue; newNode->next = 0L; AppendNode(newNode); } void List::AppendNode(ListNode *newNode) { if (head != 0L) { ListNode *cur = head; while (cur->next != 0L) cur = cur->next; cur->next = newNode; } else { head = newNode; } } void List::Reverse() { if (head != 0L) { ListNode *hold = head; head = head->next; Reverse(); hold->next = 0L; AppendNode(hold); } } void List::Print() { ListNode *cur = head; while (cur != 0L) { std::cout << cur->value << ", "; cur = cur->next; } std::cout << std::endl; } int main() { List l1; l1.Append(1); l1.Append(2); l1.Append(3); l1.Reverse(); l1.Print(); return 0; }