以下例子演示逆转一个单向链表:
test in vc++8.0 xp
#include <iostream>
#include <cassert>
using namespace std;
struct Node
{
int item;
Node* next;
Node( int item_info, Node* pLink ) : item(item_info), next(pLink)
{
}
};
typedef Node* Link;
// 逆转
Link ReverseList( Link beginLink )
{
// 维护三个链接
Link preLink;
Link curLink;
Link nextLink;
preLink = NULL;
curLink = beginLink;
while ( curLink != NULL )
{
nextLink = curLink->next;
curLink->next = preLink;
preLink = curLink;
curLink = nextLink;
}
return preLink;
}
// 创建
Link CreateSingleDirectionList( int nodeCount )
{
Link pFirst = new Node( 1, NULL );
Link pTempLink = pFirst;
for ( int pos= 2; pos <= nodeCount; pos ++ )
{
pTempLink = ( pTempLink->next = new Node( pos, NULL ) );
}
return pFirst;
}
// 销毁
void DestroySigleDirectionList( Link pFirst )
{
assert( pFirst != NULL );
if ( pFirst == NULL )
return;
for ( Link pTempLink = pFirst; pTempLink != NULL; )
{
Link pLinkNext = pTempLink->next;
delete pTempLink;
pTempLink = pLinkNext;
}
}
// test code
int _tmain(int argc, _TCHAR* argv[])
{
// 创建单向链表
Link pFirst = CreateSingleDirectionList( 20 );
for ( Link pTempLink = pFirst; pTempLink != NULL; pTempLink = pTempLink->next )
{
cout << pTempLink->item << " ";
}
cout << endl << "after reverse:/n";
// 逆向
Link pNewFirst = ReverseList( pFirst );
for ( Link pTempLink = pNewFirst; pTempLink != NULL; pTempLink = pTempLink->next )
{
cout << pTempLink->item << " ";
}
cout << endl;
DestroySigleDirectionList( pNewFirst );
return 0;
}