template<class T>
struct list {
    struct node {
        T value;
        node* next;
        node* prev;
    };

    node* head = nullptr;

    explicit list(int n) {
        head = reinterpret_cast<node *>(calloc(1, sizeof(node)));
        node* prev = head;

        for (int i = 0 + 1; i < n; ++i)
        {
            node* cur = reinterpret_cast<node *>(calloc(1, sizeof(node)));
            cur->prev = prev;
            cur->prev->next = cur;
            cur->value = i;

            prev = cur;
            cur = cur->next;
        }
    }

    void reverse() {
        node* next = nullptr;

        for (node* cur = head; cur; cur = next) {
            next = cur->next;
            cur->next = cur->prev;
            cur->prev = next;
            head = cur;
        }
    }

    void dump(ostream& os) const {
        for (node* i = head; i; i = i->next)
            os << i->value << " ";
    }

    ~list() {
        node* next = nullptr;
        for(node* iter = head; iter; iter = next) {
            next = iter->next;
            free(iter);
        }
        head = nullptr;
    }
};

int main()
{    
    using List = list<int>;

    List l(10);
    l.reverse();
    l.dump(cout);
}
Edit
Pub: 19 Feb 2020 10:54 UTC
Edit: 19 Feb 2020 10:59 UTC
Views: 245