#include <iostream>
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;
}