Quick actions

cmd+k|ctrl+k

Navigation

Languages

reverse linked list

Snippet info

Language

Cpp

Visibility

public

Author

gigi-bigi

Created

2025-04-09T18:44:47.94875Z

Updated

2025-04-09T18:45:16.336891Z

#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;
}
INFO