reverse linked list

Run Settings
LanguageC++
Language Version
Run Command
#include <iostream> template <class T> struct Elem { T x; Elem* next; Elem(const T& x) : x(x), next(nullptr) {} }; template <class T> Elem<T>* reverse_list(Elem<T>* head) { if (head == nullptr) { return nullptr; } Elem<T>* prev = nullptr; do { auto next = head->next; head->next = prev; prev = head; head = next; } while (head != nullptr); return prev; } template <class T> std::ostream& operator<<(std::ostream& os, const Elem<T>* head) { const Elem<T>* current = head; while (current != nullptr) { os << current->x << " "; current = current->next; } return os; } int main() { using Ei = Elem<int>; Ei* head = new Ei(0); Ei* tail = head; for (int n = 1; n < 10; n++) { Ei* c = new Ei(n); tail->next = c; tail = c; } std::cout << head << std::endl; Ei* rev = reverse_list(head); std::cout << rev << std::endl; return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines