1 #define IO std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
2 #define bug(x) cout<<#x<<" is "<<x<<endl;
3 #include<bits/stdc++.h>
4 using namespace std;
5 typedef long long ll;
6 struct Node{
7 int x;
8 Node*next;
9 Node(int x1,Node *next1){
10 x=x1,next=next1;
11 }
12 };
13 void reverse(Node *&head){
14 if(!head||!head->next)return;
15 Node *p=head;
16 Node *cur=nullptr;
17 while(p){
18 Node *q=p->next;
19 p->next=cur;
20 cur=p;
21 p=q;
22 }
23 head=cur;
24 }
25 Node* reverse1(Node *&pre,Node *&p){
26 if(!p->next){
27 p->next=pre;
28 return p;
29 }
30 Node *q=p->next;
31 p->next=pre;
32 pre=p;
33 return reverse1(pre,q);
34 }
35 void print(Node *head){
36 while(head){
37 cout<<head->x<<" ";
38 head=head->next;
39 }
40 cout<<endl;
41 }
42 int main(){
43 Node *head=new Node(1,nullptr);
44 Node *pre=head;
45 for(int i=2;i<=5;i++){
46 Node *p=new Node(i,nullptr);
47 pre->next=p;
48 pre=p;
49 }
50 print(head);
51 reverse(head);
52 print(head);
53 Node *p=nullptr;
54 head=reverse1(p,head);
55 print(head);
56 p=nullptr;
57 head=reverse1(p,head);
58 print(head);
59 }