1、用递归法逆转链表
思路:若传入的结点有后继结点,则先对后继结点进行逆转操作,直至追溯至链表的尾结点,进行逆转操作,将当前结点的后继结点的后继指向自己,并将当前结点的指针域置为NULL即可。
#include <cstdio>
using namespace std;
const int N=20;
int e[N],ne[N],head,idx;
void init(){
head=-1;
idx=0;
}
void add(int a){
e[idx]=a,ne[idx]=head,head=idx++;
}
int rever(int h){
if(h==-1 || ne[h]==-1) return h;
int newh=rever(ne[h]);
ne[ne[h]]=h;
ne[h]=-1;
return newh;
}
int main(){
init();
for(int i=5;i>=1;i--){
add(i);
}
for(int i=head;i!=-1;i=ne[i]){
printf("%d ",e[i]);
}
printf("\n");
head=rever(head);
for(int i=head;i!=-1;i=ne[i]){
printf("%d ",e[i]);
}
printf("\n");
return 0;
}