4-1 单链表逆转 (20分)
本题要求实现一个函数,将给定的单链表逆转。
函数接口定义:
List Reverse( List L );
其中 ‘L’ 结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
‘L’ 是给定单向链表,函数 ‘Reverse’ 要返回逆转后的链表。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */
List Reverse( List L );
int main()
{
List L1, L2;
L1 = Read();
L2 = Reverse(L1);
Print(L1);
Print(L2);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
5
1 3 4 5 2
输出样例:
1
2 5 4 3 1
#include <stdio.h>
#include <stdlib.h>
/*
时间 结果 得分 题目 编译器 用时(ms) 内存(MB) 用户
2016-02-06 16:55 答案正确 20 4-1 gcc 2 1 569985011
测试点结果
测试点 结果 得分/满分 用时(ms) 内存(MB)
测试点1 答案正确 11/11 2 1
测试点2 答案正确 3/3 1 1
测试点3 答案正确 3/3 1 1
测试点4 答案正确 3/3 1 1
*/
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(){
int n;
scanf("%d",&n);List a=(List)malloc(sizeof(struct Node));
List head=a;
while(n--){
scanf("%d",&a->Data);
if(n){a->Next=(List)malloc(sizeof(struct Node));
a=a->Next;
}
}a->Next=NULL;
return head;
}
void Print( List L ){
while(L){
printf("%d ",L->Data);
L=L->Next;
}
printf("\n");
}
/* 你的代码将被嵌在这里 */
List Reverse( List L ){//实际提交的只有这个函数
List b=NULL;
List head=L;
List a=L;
if(!L)return L;
while(L->Next){
a=L->Next;
L->Next=b;
b=L;L=a;
}
a->Next=b;
L=head;
return a;
}
int main()
{
List L1, L2;
L1 = Read();
L2 = Reverse(L1);
Print(L1);
Print(L2);
return 0;
}