面试题:
实现一个链表逆序,加入输入A->B->C->D->E 输出为E->D->C->B->A 自己定义链表:
思路:
A->B->C->D->E 每次移动一个元素;
B->A->C->D->E
C->B->A->D->E
D->C->B->A-->E
E->D->C->B->A
第一步:建立链表: 第二步:逆转函数
<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct A_S{
int iData;
struct A_S *next;
}A_S;
void LinkInit(A_S * pstLinkNode, int iNum)
{
pstLinkNode->iData = iNum;
pstLinkNode->next = NULL;
return;
}
A_S * CreateNode()
{
A_S *pstLinkNode;
pstLinkNode = (A_S *)malloc(sizeof(A_S));
if(NULL == pstLinkNode)
{
return NULL;
}
return pstLinkNode;
}
void FreeNode(A_S *pstLinkNode)
{
if(NULL == pstLinkNode)
{
return ;
}
free(pstLinkNode);
return;
}
void PrintLink(A_S *pstLinkHead)
{
A_S *pstNodeTemp;
int i;
if(NULL == pstLinkHead)
{
return;
}
pstNodeTemp = pstLinkHead;
while(NULL != pstNodeTemp)
{
printf("%d\r\n", pstNodeTemp->iData );
pstNodeTemp = pstNodeTemp->next;
}
printf("\n");
return;
}
A_S * ReverseLink(A_S *pstLinkHead)
{
A_S *pstReverHead;
A_S *pstLinkTemp;
A_S *pstLinkNext;
if(NULL == pstLinkHead)
{
return ;
}
pstReverHead = pstLinkHead;
pstLinkNext = pstLinkHead->next;
while(NULL != pstLinkHead->next)
{
pstLinkTemp = pstLinkNext->next;
pstLinkNext->next = pstReverHead;
pstLinkHead->next = pstLinkTemp;
pstReverHead = pstLinkNext;
pstLinkNext = pstLinkHead->next;
}
PrintLink(pstReverHead);
return pstReverHead;
}
int main()
{
A_S *pstLinkNode = NULL;
A_S *pstLinkHead = NULL;
A_S *pstLinkTemp = NULL;
int i=0;
pstLinkHead = CreateNode();
if(NULL == pstLinkHead)
{
return 0;
}
LinkInit(pstLinkHead, 0);
pstLinkTemp = pstLinkHead;
for(i=1; i<=N; i++)
{
pstLinkNode = CreateNode();
if(NULL == pstLinkNode)
{
return 0;
}
LinkInit(pstLinkNode, i);
pstLinkTemp->next = pstLinkNode;
pstLinkTemp = pstLinkTemp->next;
}
PrintLink(pstLinkHead);
pstLinkHead = ReverseLink(pstLinkHead);
pstLinkNode = pstLinkHead;
for(i=0; i<N; i++)
{
pstLinkTemp = pstLinkNode->next;
FreeNode(pstLinkNode);
pstLinkNode = pstLinkTemp;
}
return 0;
}