#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tagLinkList{
struct tagLinkList *next;
int num;
}LINK_LIST_S;
LINK_LIST_S *LinkList_CreateNode(int num)
{
LINK_LIST_S *pstLinkList = NULL;
pstLinkList = (LINK_LIST_S *) malloc(sizeof(LINK_LIST_S));
if (NULL != pstLinkList)
{
memset(pstLinkList, 0, sizeof(LINK_LIST_S));
pstLinkList->num = num;
}
return pstLinkList;
}
int LinkList_AddNodeBefore(LINK_LIST_S *pstHead, int num)
{
LINK_LIST_S *pstAddNode = NULL;
LINK_LIST_S *pstCurNext = NULL;
pstAddNode = LinkList_CreateNode(num);
if (NULL == pstAddNode)
{
return -1;
}
pstCurNext = pstHead->next;
pstHead->next = pstAddNode;
pstAddNode->next = pstCurNext;
return 0;
}
void LinkList_DisplayAll(LINK_LIST_S *pstHead)
{
LINK_LIST_S *pstCurNode = NULL;
pstCurNode = pstHead->next;
while (NULL != pstCurNode)
{
printf("current num = %d \r\n", pstCurNode->num);
pstCurNode = pstCurNode->next;
}
return;
}
int LinkList_Init(LINK_LIST_S *pstHead, int num)
{
LINK_LIST_S *pstCurNode = NULL;
int iCount = 0;
int iRet = 0;
for (iCount = 0; iCount < num; iCount++)
{
iRet = LinkList_AddNodeBefore(pstHead, iCount);
if (iRet != 0)
{
break;
}
}
return iRet;
}
int LinkList_Reverse(LINK_LIST_S *pstHead, LINK_LIST_S *pstNewHead)
{
LINK_LIST_S *pstCurNode = NULL;
LINK_LIST_S *pstNextNode = NULL;
pstNextNode = pstHead->next;
while (pstNextNode != NULL)
{
/* get cur node*/
pstCurNode = pstNextNode;
/* move the old head to the next node*/
pstNextNode = pstCurNode->next;
/* add cur node before the new head */
pstCurNode->next = pstNewHead->next;
pstNewHead->next = pstCurNode;
}
return 0;
}
int main()
{
LINK_LIST_S stHead;
LINK_LIST_S stReverseHead;
memset(&stHead, 0, sizeof(stHead));
memset(&stReverseHead, 0, sizeof(stHead));
LinkList_Init(&stHead, 10);
LinkList_DisplayAll(&stHead);
printf("Reverse...\r\n");
LinkList_Reverse(&stHead, &stReverseHead);
LinkList_DisplayAll(&stReverseHead);
return 0;
}
运行结果:
current num = 9
current num = 8
current num = 7
current num = 6
current num = 5
current num = 4
current num = 3
current num = 2
current num = 1
current num = 0
Reverse...
current num = 0
current num = 1
current num = 2
current num = 3
current num = 4
current num = 5
current num = 6
current num = 7
current num = 8
current num = 9