方法1:
// problem 3.12.a
List Reverse_a(List L)
{
List TmpL;
Position P;
P = First(L);
TmpL = MakeEmpty();
while ( P != NULL ) {
Insert(Retrieve(P), TmpL, TmpL);
P = Advance(P);
}
DeleteList(L);
return TmpL;
}
方法2:
// problem 3.12.b
List Reverse(List L)
{
Position P, PPrev, PNext;
P = First(L);
PPrev = L;
PNext = Advance(P);
if(P == NULL)
return L;
while(PNext != NULL) {
P->Next = PPrev;
if(PPrev == L)
P->Next = NULL;
PPrev = P;
P = PNext;
PNext = Advance(P);
}
P->Next = PPrev;
L->Next = P;
return L;
}
测试代码
#include "list.h"
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char* argv[])
{
List L;
Position P;
int i;
L = MakeEmpty();
for(i = 0; i < 10; i++)
Insert(i, L, L);
PrintList(L);
L = Reverse(L);
PrintList(L);
}