```c
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int value ;
struct list * prior,
* next;
} DLINK;
enum FLAG
{
ERROR = - 1 ,
OK
} ;
DLINK* createList ( ) ;
int insertList ( DLINK * pLink , int val ) ;
int linkReverse ( DLINK * pLink ) ;
int showLink ( DLINK * pLink ) ;
int main ( int argc, char * argv[ ] )
{
DLINK * pList = createList ( ) ;
if ( NULL == pList )
{
printf ( "创建失败\n" ) ;
return ERROR;
}
printf ( "创建成功\n" ) ;
insertList ( pList , 2 ) ;
insertList ( pList , 3 ) ;
insertList ( pList , 4 ) ;
insertList ( pList , 5 ) ;
printf ( "顺序\n" ) ;
showLink ( pList ) ;
printf ( "\n" ) ;
linkReverse ( pList ) ;
printf ( "逆序\n" ) ;
showLink ( pList ) ;
printf ( "\n" ) ;
system ( "PAUSE" ) ;
return 0 ;
}
DLINK* createList ( )
{
DLINK * p = ( DLINK* ) malloc ( sizeof ( DLINK) ) ;
if ( p != NULL )
{
memset ( p , 0 , sizeof ( DLINK ) ) ;
}
return p ;
}
int insertList ( DLINK * pLink , int val )
{
if ( NULL == pLink )
{
return ERROR;
}
DLINK * p = ( DLINK * ) malloc ( sizeof ( DLINK ) ) ,
* tail = pLink;
if ( NULL == p )
{
return ERROR;
}
memset ( p , 0 , sizeof ( DLINK ) ) ;
while ( NULL != tail- > next )
{
tail = tail- > next;
}
p- > value = val ;
p- > next = NULL ;
p- > prior = tail ;
tail- > next = p;
return OK;
}
int showLink ( DLINK * pLink )
{
if ( NULL == pLink || NULL == pLink- > next )
{
return ERROR;
}
pLink = pLink- > next;
do
{
printf ( "%d " , pLink- > value ) ;
}
while ( pLink = pLink- > next ) ;
return OK;
}
int linkReverse ( DLINK * pLink )
{
if ( NULL == pLink || NULL == pLink- > next )
{
return ERROR;
}
DLINK * p = pLink- > next ,
* temp = NULL ,
* tail = NULL ,
* head = pLink- > next ;
do
{
if ( NULL == p- > next )
{
tail = p ;
}
temp = p- > prior ;
p- > prior = p- > next ;
p- > next = temp ;
} while ( p = p- > prior ) ;
head- > next = NULL ;
pLink- > next = tail;
tail- > prior = pLink;
return OK;
}
程序运行结果如下: