Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory>
- template<class T>
- class TList {
- private:
- struct TNode;
- using TNodePtr = std::shared_ptr<TNode>;
- struct TNode {
- TNode(const T& value)
- : Value(value)
- {}
- TNodePtr Next;
- T Value;
- };
- public:
- void PushFront(const T& value) {
- TNodePtr node(new TNode(value));
- if (!Begin) {
- Begin = End = node;
- } else {
- node->Next = Begin;
- Begin = node;
- }
- }
- void PushBack(const T& value) {
- TNodePtr node(new TNode(value));
- if (!Begin) {
- Begin = End = node;
- } else {
- End->Next = node;
- End = node;
- }
- }
- void Reverse() {
- TNodePtr revBegin;
- for (TNodePtr node = Begin; node;) {
- TNodePtr current = node;
- node = node->Next;
- current->Next = revBegin;
- revBegin = current;
- }
- End = Begin;
- Begin = revBegin;
- }
- void Print() const {
- for (TNodePtr node = Begin; node; node = node->Next) {
- std::cout << node->Value << " ";
- }
- std::cout << std::endl;
- }
- private:
- TNodePtr Begin;
- TNodePtr End;
- };
- int main() {
- TList<int> list;
- for (int i = 1; i <= 6; ++i) {
- list.PushBack(i);
- }
- list.Print();
- list.Reverse();
- list.Print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement