#include <stdlib.h> #include <stdio.h> struct Node { int iValue; struct Node* pNext; }; typedef struct Node Node; Node* RevList( Node* pHeader ) { if( !pHeader ) return NULL; Node* pRes = pHeader;//保存结果 Node* pCur = pHeader;//当前处理节点 Node* pNext = pHeader->pNext;//下一节点 pRes->pNext = NULL;//首节点下一节点置空 //算法如下:取当前节点保存其后续节点 断开当前节点到结果链表的首部 while( pNext ) { pCur = pNext; pHeader = pNext->pNext; pCur->pNext = pRes; pNext = pHeader; pRes = pCur; } return pRes; } void PrintList( Node* const pHeader ) { Node* pCur = pHeader; while( pCur ) { printf( "%d ",pCur->iValue ); pCur = pCur->pNext; } puts( "" ); } int main( int argc,char** argv ) { Node* pHeader = (Node*)malloc( sizeof( Node ) ); Node* pCur = pHeader; pCur->iValue = 1; pCur->pNext = (Node*)malloc( sizeof( Node ) ); pCur = pCur->pNext; pCur->iValue = 2; pCur->pNext = (Node*)malloc( sizeof( Node ) ); pCur = pCur->pNext; pCur->iValue = 3; pCur->pNext = NULL; PrintList( pHeader ); pHeader = RevList( pHeader ); PrintList( pHeader ); puts( "" ); return 0; }