数据结构基础PTA 6-1 单链表逆转
2018-02-20 02:17
363 查看
6-1 单链表逆转(20 分)
本题要求实现一个函数,将给定的单链表逆转。函数接口定义:
List Reverse( List L );其中
List结构定义如下:
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唔,我觉得我的函数肯定是不够好的,我把read函数也自己实现了一遍,为了调试用;一开始看题目觉得有点奇怪啊,为什么print(L1)就只剩下1了,因为后面的节点都移到前面去了,然而又没有修改L1,所以L1只剩下一个元素了;然后reverse这个函数,肯定有多种写法的,自己写的很不优雅!甚至说代码写的很难看,用while或许会更好点,最重要的就是两步:
step1: delete: p->next = q->next;
step2: insert: q->next = L; L=q;#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List; //like the head
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */
List Reverse( List L );
List Read(){
int num,i;
scanf("%d",&num);
List L1;
L1 = NULL;
while (num) {
scanf("%d",&i);
PtrToNode p = (Node *)malloc(sizeof(Node));
p->Data = i;
p->Next = NULL;
if(L1 == NULL){
L1 = p;
}else{
PtrToNode tmp = L1;
for(; tmp->Next; tmp=tmp->Next); // point!!!
tmp->Next = p;
}
num--;
}
return L1;
}
void Print(List L){
PtrToNode p = (Node *)malloc(sizeof(Node));
for(p=L; p ;p=p->Next)
printf("%d ",p->Data);
}
List Reverse( List L ){
PtrToNode p,q;
for(p=L; p; ){
q = p->Next;
if(q){
p->Next = q->Next;
q->Next = L;
L = q;
}else
break;
}
return L;
}
// I should check how others do this, in a more elegant coding way;
int main()
{
List L1, L2;
L1 = Read();
L2 = Reverse(L1);
Print(L1); //After reverse, there is only one node left in L1, really special!!!
Print(L2);
return 0;
}
相关文章推荐
- pta-数据结构与算法题目集(中文)-4-1-单链表逆转
- 数据结构基础(2)---链表基础概念
- 【数据结构】单链表--基础
- 数据结构基础(3)---C语言实现单链表
- 最基础的动态数据结构:链表
- 数据结构基础(一):单链表 双链表 循环链表
- 数据结构基础 - 链表的创建(C和C#代码)
- php学习第一章:PHP基础语法(三)数据结构与算法:2、单向链表
- 基础数据结构之数组与链表(五)
- 数据结构基础(3)---C语言实现单链表
- 【数据结构基础】链表的倒数第M个结点的查找
- 学习java数据结构基础知识之链表
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- PJLIB库基础框架-数据结构之循环链表的使用
- 数据结构基础--单链表
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 数据结构基础——链表
- 基础数据结构:顺序表、链表——Python实现
- 数据结构基础——链表及链表函数
- 数据结构基础 之 单链表 各类操作、思想与实现