解释一下 反转链表 的这个程序吧,该如何解决

解释一下 反转链表 的这个程序吧
只要解释算法部分,详细点吧,谢谢了,麻烦大家了

#include   <iostream>

using   namespace   std;

//元结点
struct   Node
{
        int   data;
        Node   *next;
};

//链表反转(循环方法)
Node   *Reverse(Node   *head)
{
        Node   *prev   =   NULL;
        Node   *cur   =   NULL;
        Node   *next   =   head;

        for   (;   next   !=   NULL;   )
        {
                cur   =   next;
                next   =   cur-> next;
                cur-> next   =   prev;
                prev   =   cur;
        }

        return   prev;
}

//链表反转(递归方法)
Node   *Reverse2(Node   *head)
{
        if   (!head)
        {
                return   NULL;
        }

        Node   *temp   =   Reverse2(head-> next);

        if   (!temp)
        {
                return   head;
        }

        head-> next-> next   =   head;
        head-> next   =   NULL;

        return   temp;
}

//创建链表
Node   *Construct(int   *const   array,   int   len)
{
        Node   *pre   =   NULL,   *head   =   NULL;

        for   (int   i   =   len;   i   >   0;   i--)
        {
                if   (!pre)
                {
                        head   =   new   Node;
                        head-> data   =   array[len   -   i];
                        head-> next   =   NULL;
                        pre   =   head;
                }
                else
                {
                        pre-> next   =   new   Node;
                        pre   =   pre-> next;
                        pre-> data   =   array[len   -   i];
                        pre-> next   =   NULL;