#include <iostream>
using namespace std;
#define MAX 100
struct ListNode{
int data;
int next;
};
typedef int List; //这样写是不是就能和 指针实现的链表 对应上了?
// 用数组直接填充静态链表,这样写是为了方便,因为本文关注的是reverse操作
List makelist(ListNode space[],int arr[],int n){
for(int i=0;i<n;i++){
space[i+1].data=arr[i];
space[i+1].next=i+2;
}
space[0].next=1;
space[n].next=-1;
return space[0].next;
}
void showlist(ListNode space[],List list){
List cur=list;
while(cur!=-1){
cout<<space[cur].data<<' ';
cur=space[cur].next;
}
cout<<endl;
}
// 线性表逆置算法 类似于头插法
void reverse(ListNode space[],List& list){
List dummy=0,cur=list;
space[dummy].next=-1;
while(cur!=-1){
List temp=space[cur].next;
space[cur].next=space[dummy].next;
space[dummy].next=cur;
cur=temp;
}
list=space[dummy].next;
}
int main()
{
// 存储池space
ListNode space[MAX];
int arr[7]={2,4,1,7,1,3,-2};
List list=makelist(space,arr,7);
cout<<"原线性表"<<endl;
showlist(space,list);
reverse(space,list);
cout<<"逆置后"<<endl;
showlist(space,list);
reverse(space,list);
cout<<"再逆置"<<endl;
showlist(space,list);
return 0;
}
我们可以看一下结果