int main(int argc, char* argv[])
{
int count,i;
pLinkList Head,tmpNode,Tail;
Head=NULL;
// Construct LinkList.
printf("Enter count:"); scanf("%d",&count);
if(count <= 1)
{
printf("Count error,must large than 1.\n");
exit(1);
}
for(i=1;i<=count;++i)
{
tmpNode=(LinkList *)malloc(sizeof(LinkList));
tmpNode->data=i;
printf("No.=%d\t Address:%X , Data:%d\n",i,tmpNode,tmpNode->data);
if(!Head)
Tail=Head=tmpNode;
else{
Tail->next=tmpNode;
Tail=tmpNode;
}
}
Tail->next=NULL;
// Reverse LinkList.
if(2 == count) {
//N=2
SWAP_POINT(Head,Tail->next);
SWAP_POINT(Head,Tail);
SWAP_POINT(Head->next->next,Tail);
}else if(3 == count) {
//N=3
SWAP_POINT(Head->next,Tail->next);
SWAP_POINT(Head,Tail);
SWAP_POINT(Head->next->next,Tail);
}else{
//N>=4
SWAP_POINT(Head->next,Tail->next);
SWAP_POINT(Head,Tail);
SWAP_POINT(Head->next->next,Tail);
SWAP_POINT(Head->next,Tail->next);
SWAP_POINT(Head->next->next,Tail);
for(i=6;i<=count;++i)
{
SWAP_POINT(Head->next,Tail);
SWAP_POINT(Head->next->next,Tail);
}
}
//Output reversed LinkList.
tmpNode=Head;
printf("After reverse.\n");
for(i=1;i<=count;++i)
{
printf("No.=%d\t Address:%X , Data:%d\n",i,tmpNode,tmpNode->data);
tmpNode = tmpNode->next;
}
//Release LinkList
printf("Release LinkList.\n");
for(i=1;i<=count;++i)
{
tmpNode=Head;
Head = Head->next;
free(tmpNode);
}
return 0;
}