将一个链表逆序

面试题:

实现一个链表逆序,加入输入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;        
}


 







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值