/*************************************************************************
> File Name: ReviseList.c
> Author: hai--feng
> Mail: haifeng@126.com
> Created Time: Tue 26 Mar 2013 08:00:47 AM CST
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
#define TRUE 1
#define FAULSE -1
#define LISTHDDATA -1
typedef int Boolen;
typedef struct LinkNode
{
struct LinkNode *pNext;
int data;
}LinkNode, *LinkNodeHdl, *LinkListHdl;
LinkListHdl ListCreate( void )
{
LinkListHdl ListHd = NULL;
ListHd = ( LinkListHdl )malloc( sizeof( LinkNode ) );
if( NULL == ListHd )
{
printf( "space is not enough! malloc failed!\r\n" );
goto ListCreateOut;
}
ListHd->data = LISTHDDATA;
ListHd->pNext = NULL;
ListCreateOut:
return ListHd;
}
Boolen PutDataToLinkList( LinkListHdl listHdl, int *data, int dataCount )
{
Boolen ret = TRUE;
int Count = 0;
LinkNodeHdl NodeHdl = NULL;
LinkNodeHdl LinkTrilHdl = NULL;
if( ( NULL == listHdl ) || ( NULL == data ) || ( 0 == dataCount ) )
{
printf( "no data to be put to list!\r\n" );
goto PutDataToLinkListOut;
}
/* find Link List trial */
LinkTrilHdl = listHdl;
while( LinkTrilHdl->pNext != NULL)
{
LinkTrilHdl = LinkTrilHdl->pNext;
}
/* create new Link node and put it to Link List */
for( ; Count < dataCount; Count++ )
{
NodeHdl = ( LinkNodeHdl )malloc( sizeof( LinkNode ) );
if( NULL == NodeHdl )
{
printf( "space is not enough, create %d node failed!\n", ( Count + 1 ) );
ret = FAULSE;
goto PutDataToLinkListOut;
}
NodeHdl->data = data[ Count ];
NodeHdl->pNext = NULL;
/* Put to List */
LinkTrilHdl->pNext = NodeHdl;
LinkTrilHdl = NodeHdl;
NodeHdl = NULL;
}
PutDataToLinkListOut:
return ret;
}
Boolen ReviseLinkList( LinkListHdl listHdl )
{
Boolen ret = TRUE;
LinkNodeHdl Pre = NULL, Pcur = NULL, Pnex = NULL;
if( NULL == listHdl )
{
printf( "param is illegal!\n" );
}
Pre = listHdl->pNext;
Pcur = Pre->pNext;
Pnex = Pcur->pNext;
while( Pcur->pNext != NULL )
{
Pcur->pNext = Pre;
Pre = Pcur;
Pcur = Pnex;
Pnex = Pnex->pNext;
}
Pcur->pNext = Pre;
listHdl->pNext->pNext = NULL;
listHdl->pNext = Pcur;
Pre = Pcur = Pnex = NULL;
ReviseLinkListOut:
return ret;
}
void LinkListPrint( LinkListHdl listHdl )
{
LinkNodeHdl pNodeHdl = NULL;
if( NULL == listHdl )
{
printf( "param is illegal!\n" );
}
else
{
pNodeHdl = listHdl->pNext;
while( pNodeHdl->pNext != NULL )
{
printf( "%4d", pNodeHdl->data );
pNodeHdl = pNodeHdl->pNext;
}
printf( "%4d\r\n", pNodeHdl->data );
pNodeHdl = NULL;
}
}
int main( void )
{
int Data[ MAX ] = { 0 };
int ii = 0;
LinkListHdl ListHdl = NULL;
int ret = 0;
for( ; ii < MAX; ii++ )
{
Data[ ii ] = ( ii + 1 );
}
if( NULL == ( ListHdl = ListCreate( ) ) )
{
printf( "LinkList create failed!\n" );
ret = -1;
goto Out;
}
if( FAULSE == PutDataToLinkList( ListHdl, Data, MAX ) )
{
printf( "put data to Link List failed!\n" );
ret = -1;
goto Out;
}
LinkListPrint( ListHdl );
if( FAULSE == ReviseLinkList( ListHdl ) )
{
printf( "revise Link List failed!\n" );
ret = -1;
goto Out;
}
LinkListPrint( ListHdl );
Out:
return ret;
}
> File Name: ReviseList.c
> Author: hai--feng
> Mail: haifeng@126.com
> Created Time: Tue 26 Mar 2013 08:00:47 AM CST
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
#define TRUE 1
#define FAULSE -1
#define LISTHDDATA -1
typedef int Boolen;
typedef struct LinkNode
{
struct LinkNode *pNext;
int data;
}LinkNode, *LinkNodeHdl, *LinkListHdl;
LinkListHdl ListCreate( void )
{
LinkListHdl ListHd = NULL;
ListHd = ( LinkListHdl )malloc( sizeof( LinkNode ) );
if( NULL == ListHd )
{
printf( "space is not enough! malloc failed!\r\n" );
goto ListCreateOut;
}
ListHd->data = LISTHDDATA;
ListHd->pNext = NULL;
ListCreateOut:
return ListHd;
}
Boolen PutDataToLinkList( LinkListHdl listHdl, int *data, int dataCount )
{
Boolen ret = TRUE;
int Count = 0;
LinkNodeHdl NodeHdl = NULL;
LinkNodeHdl LinkTrilHdl = NULL;
if( ( NULL == listHdl ) || ( NULL == data ) || ( 0 == dataCount ) )
{
printf( "no data to be put to list!\r\n" );
goto PutDataToLinkListOut;
}
/* find Link List trial */
LinkTrilHdl = listHdl;
while( LinkTrilHdl->pNext != NULL)
{
LinkTrilHdl = LinkTrilHdl->pNext;
}
/* create new Link node and put it to Link List */
for( ; Count < dataCount; Count++ )
{
NodeHdl = ( LinkNodeHdl )malloc( sizeof( LinkNode ) );
if( NULL == NodeHdl )
{
printf( "space is not enough, create %d node failed!\n", ( Count + 1 ) );
ret = FAULSE;
goto PutDataToLinkListOut;
}
NodeHdl->data = data[ Count ];
NodeHdl->pNext = NULL;
/* Put to List */
LinkTrilHdl->pNext = NodeHdl;
LinkTrilHdl = NodeHdl;
NodeHdl = NULL;
}
PutDataToLinkListOut:
return ret;
}
Boolen ReviseLinkList( LinkListHdl listHdl )
{
Boolen ret = TRUE;
LinkNodeHdl Pre = NULL, Pcur = NULL, Pnex = NULL;
if( NULL == listHdl )
{
printf( "param is illegal!\n" );
}
Pre = listHdl->pNext;
Pcur = Pre->pNext;
Pnex = Pcur->pNext;
while( Pcur->pNext != NULL )
{
Pcur->pNext = Pre;
Pre = Pcur;
Pcur = Pnex;
Pnex = Pnex->pNext;
}
Pcur->pNext = Pre;
listHdl->pNext->pNext = NULL;
listHdl->pNext = Pcur;
Pre = Pcur = Pnex = NULL;
ReviseLinkListOut:
return ret;
}
void LinkListPrint( LinkListHdl listHdl )
{
LinkNodeHdl pNodeHdl = NULL;
if( NULL == listHdl )
{
printf( "param is illegal!\n" );
}
else
{
pNodeHdl = listHdl->pNext;
while( pNodeHdl->pNext != NULL )
{
printf( "%4d", pNodeHdl->data );
pNodeHdl = pNodeHdl->pNext;
}
printf( "%4d\r\n", pNodeHdl->data );
pNodeHdl = NULL;
}
}
int main( void )
{
int Data[ MAX ] = { 0 };
int ii = 0;
LinkListHdl ListHdl = NULL;
int ret = 0;
for( ; ii < MAX; ii++ )
{
Data[ ii ] = ( ii + 1 );
}
if( NULL == ( ListHdl = ListCreate( ) ) )
{
printf( "LinkList create failed!\n" );
ret = -1;
goto Out;
}
if( FAULSE == PutDataToLinkList( ListHdl, Data, MAX ) )
{
printf( "put data to Link List failed!\n" );
ret = -1;
goto Out;
}
LinkListPrint( ListHdl );
if( FAULSE == ReviseLinkList( ListHdl ) )
{
printf( "revise Link List failed!\n" );
ret = -1;
goto Out;
}
LinkListPrint( ListHdl );
Out:
return ret;
}