#include <stdio.h>#include <stdlib.h>typedefstruct Node_{
int data;
struct Node_ * next;
}Node, * List;
void PrintList( List L )
{
/* suppose no header */while( L != NULL ){
printf( "%d\t", L->data );
L = L->next;
}
}
void ReverseList1( List L )
{
/*
reverse the list Head with a header
利用栈的思想,将元素依次入栈,便能反转
依次分离结点,再使用头插法可以达到相同的效果
注意头插法不需要有头结点
*/
List P = NULL;
while( L->next != NULL ){
List S = L->next;
L->next = S->next;
S->next = P;
P = S;
}
L->next = P;
}
void ReverseList2( List * L )
{
/* suppose no header */
List P = NULL;
List S;
while( *L != NULL ){
S = *L;
*L = S->next;
S->next = P;
P = S;
}
*L = P;
}
int main()
{
List Head = (List)malloc( sizeof( Node ) );
Head->next = NULL;
/* initialize list */for( int i = 1; i < 10; i++ ){
List S = (List)malloc( sizeof( Node ) );
S->data = i;
S->next = Head->next;
Head->next = S;
}
PrintList( Head->next );
ReverseList1( Head );
printf( "\n" );
PrintList( Head->next );
List Temp = Head->next;
free( Head );
Head = Temp;
ReverseList2( &Head );
PrintList( Head );
return0;
}