Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement