Advertisement
bogolyubskiyalexey

Reverse single linked list

Jul 15th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. template<class T>
  5. class TList {
  6. private:
  7.     struct TNode;
  8.     using TNodePtr = std::shared_ptr<TNode>;
  9.  
  10.     struct TNode {
  11.         TNode(const T& value)
  12.             : Value(value)
  13.         {}
  14.  
  15.         TNodePtr Next;
  16.         T Value;
  17.     };
  18. public:
  19.     void PushFront(const T& value) {
  20.         TNodePtr node(new TNode(value));
  21.         if (!Begin) {
  22.             Begin = End = node;
  23.         } else {
  24.             node->Next = Begin;
  25.             Begin = node;
  26.         }
  27.     }
  28.     void PushBack(const T& value) {
  29.         TNodePtr node(new TNode(value));
  30.         if (!Begin) {
  31.             Begin = End = node;
  32.         } else {
  33.             End->Next = node;
  34.             End = node;
  35.         }
  36.     }
  37.     void Reverse() {
  38.         TNodePtr revBegin;
  39.         for (TNodePtr node = Begin; node;) {
  40.             TNodePtr current = node;
  41.             node = node->Next;
  42.  
  43.             current->Next = revBegin;
  44.             revBegin = current;
  45.         }
  46.         End = Begin;
  47.         Begin = revBegin;
  48.     }
  49.     void Print() const {
  50.         for (TNodePtr node = Begin; node; node = node->Next) {
  51.             std::cout << node->Value << " ";
  52.         }
  53.         std::cout << std::endl;
  54.     }
  55. private:
  56.     TNodePtr Begin;
  57.     TNodePtr End;
  58. };
  59.  
  60. int main() {
  61.     TList<int> list;
  62.     for (int i = 1; i <= 6; ++i) {
  63.         list.PushBack(i);
  64.     }
  65.     list.Print();
  66.     list.Reverse();
  67.     list.Print();
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement