我想通过这个resverse来翻转链表,为什么翻转不了啊,根本一点都没变化。

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
·····················································.h文件
#ifndef LIST_H
#define LIST_H
#include <iostream>
using namespace std;

template <class T>
struct Node
{
    T data;
    Node<T> *next;
};

template <class T>
class List
{
private:
    Node<T> *head;
    int _size;

public:
    List();
    void createlist1(int n);
    void createlist2(int n);
    void insert(int i, int e);
    void deletebyeindex(int i);
    int find(T element);
    void change(int j, T element);
    void reverse();
    void display();
};
//插入链表
template <class T>
void List<T>::createlist2(int n)
{
    Node<T> *temp;
    Node<T> *p;
    p = head;
    cout << "请输入你想输入的元素: " << endl;
    for (int i = 0; i < n; i++)
    {
        temp = new Node<T>;
        cin >> temp->data;
        p->next = temp;
        p = temp;
    }
    p->next = NULL;
}
//反转链表
//反转链表
template <class T>
void List<T>::reverse()
{
    Node<T> *reverse = NULL;
    Node<T> *next;
    for (int i = 0; i < _size; i++)
    {
        next = head->next;
        head->next = reverse;
        reverse = head;
        head = next;
    }
}
·················································································    .cpp文件
#include <iostream>
#include "List.h"

using namespace std;

int main()
{
    // List<double> s1;
    List<int> s2;
    // s1.createlist1(4);
    s2.createlist2(4);
    // s1.display();
   // s2.insert(2,200);
    // s2.deletebyeindex(1);
    s2.display();
    // s2.change(1,200);
    // s2.reserve();
    // s2.display();
    s2.reverse();
    s2.display();
    // cout << s2.find(4) << endl;
    return 0;
}
运行结果及报错内容

1
2
3
4
1
2
3
4

我的解答思路和尝试过的方法
我想要达到的结果

我要看了你的display才能下定论,而且你好歹也发一下测试截图呀

s2.reverse();这方法,需要返回反转后的集合,然后List 2 = s2.reverse()

你自己先拿个笔在纸上画画,你的反转代码逻辑都不对