将一个链表逆序
2014-07-03 20:38
162 查看
面试题:
实现一个链表逆序,加入输入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;
}
实现一个链表逆序,加入输入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;
}
相关文章推荐
- 基于链表:键盘输入若干个整数,按输入数据逆序建立一个带头结点的单链表
- 将一个单向链表逆序
- 如何实现将一个链表逆序?
- 设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来
- 设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头
- 设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来
- 链表逆序(递归&非递归)/倒序输出链表值/用一个递增序列构建平衡二叉搜索树/用递归的方法判断数组是不是升(降)序排列
- 用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串
- 面试题:用一个临时变量实现单链表逆序
- 将链表逆序排列的一个程序及思考的对链表依某一元素排序方法
- 将一个单向链表逆序
- 2. Add Two Numbers 给定的两个链表是逆序排列的,相加后放在一个新的链表里边
- 将一个链表按逆序排列
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- 给定一单链表的表头指针和指向其中一个节点的指针,要求以该指针为头将原链表逆序
- 已知链表的头结点head,写一个函数把这个链表逆序
- 每天一个算法之链表逆序
- 如何逆序输出一个链表的节点内容
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,