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
List Reverse( List L )//前插法
{struct Node *p,*L1=(struct Node*)malloc(sizeof(struct Node));L1->Next=NULL;struct Node *p1=L;while(p1!=NULL)//前插法,返回的是一个新链表,记住这点{p=(struct Node*)malloc(sizeof(struct Node));p->Data=p1->Data;//p->Next=L1->Next;L1->Next=p;p1=p1->Next;}if(L!=NULL)//为什么这里有这样的一个if语句呢?还记得我说的吗,这个函数返回的是一个新链表……而进行过逆转后的第一个数字下一个应该指向的是NULLL->Next=NULL;return L1->Next;
}
总之上面那个代码,说实话不太好,我下次不会再写了……下面这个比较好一点,如果看不懂,听我解释一遍你应该就能懂了。
你从一个链表里拿出一个结点,让这个结点指向上一个结点,前提是用了一个同类型的指针保存了这个结点的下一个结点,并且还要保存这个结点,因为这个结点就是下次循环里的上个节点,这就是下面这个代码的思路。
List Reverse( List L )
{List *p1=NULL,*p2=NULL;while(L){p2=L->Next;//保存“这个结点的下一个结点”L->Next=p1;//让“这个结点”指向上一个结点p1=L;//“这个结点”还有用,因为“下一个结点”要指向它,所以用p1来存放着,//换句话说就是下一个循环里的“上一个结点”L=p2;//这个起遍历的作用}return p1;
}
6-1 单链表逆转 (20分)两种实现方法。相关推荐
- 6-1 单链表逆转 (20分)
本题要求实现一个函数,将给定的单链表逆转. 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; ...
- pta:6-1单链表逆转(20分)
大一下半期数据结构 数据结构实践任务2 pta:单链表逆转 这是一个新手小白学数据结构所经历的所有题目集. 本题要求实现一个函数,将给定的单链表逆转. 函数接口定义: List Reverse( Li ...
- 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu
6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...
- 6-1 单链表逆转分数 20
本题要求实现一个函数,将给定的单链表逆转. 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; ...
- 2-2 学生成绩链表处理 (20 分)
2-2 学生成绩链表处理 (20 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node * ...
- 6-4 单链表插入排序 (15分)
6-4 单链表插入排序 (15分) 单链表插入排序 ###目的: 掌握单链表的应用和插入排序的思想. ###内容: 编写一个函数insertion_sort,对一个无序单链表采用插入排序的方式,将其按 ...
- java 链表逆转_java 实现单链表逆转详解及实例代码
java 实现单链表逆转详解 实例代码: class Node { Node next; String name; public Node(String name) { this.name = nam ...
- 单链表操作之合并两个单链表
***单链表操作之合并两个单链表*** /* 本篇博客为合并两个单链表, 有序和无序都可以: 其中用到单链表的尾插和单链表的选择排序: @单链表排序之选择排序链接:http://blog.csdn. ...
- 有苦有乐的算法 --- 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点
题目 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点. 解析 第一步,判断链表是有环链表还是无环链表: 如果一个单链表无环,它一定有一个指向null的尾结点: 如 ...
最新文章
- ORA-00942:表或视图不存在(低级错误)
- obj + mtl 格式说明
- Confluence 6 下载和安装 MySQL 驱动
- Vue指令之v-for——迭代数组、迭代对象中的属性、迭代数字||v-for循环中key属性的使用
- 2017-10-17 开源非英文关键词编程语言
- 在cshtml中显示FCKeditor编辑器控件
- CodeForces - 830C Bamboo Partition(数学+推公式)
- s4800扫描电镜的CSS3_Hitachi S-4800型场发射扫描电子显微镜+能谱
- lichee linux nfs,SPI Flash 系统编译
- 架构设计-数据访问层简述
- 华为P50为屠榜而来:搭载超高像素1/1.18英寸大底主摄
- DefaultNetworkCredentials vs DefaultCredentials
- mysql整段注释_MySQL 添加注释(comment)
- 智能解方程计算机在线使用,作业帮计算器在线使用
- axure文件如何加密_Axure教程:密码可见与不可见的切换设置
- 对讲机有哪些?如何选购对讲机?
- Jmeter性能测试报告导出
- 1024程序员节来喽
- 算法时间复杂度计算方法
- Epub 阅读器 - iOS
热门文章
- Ubuntu日常使用问题杂记
- 使用Visual Studio Code工具创建Vue项目并运行
- 渣本安卓客户端Android秋招总结(重排了字号)
- 海洋霸权和Libra
- 历代魅族旗舰手机主要参数对比,更新于2021年5月
- Linux(CentOS7)治理组件nacos(2.0.3版本)单机/集群安装部署详细图解
- Google Cloud Platform 学习笔记(二)
- linux查gunicorn进程,linux 优雅的退出/关闭/重启gunicorn进程
- 東京喰種_经典台词中日双语4
- pyqt5开发桌面应用时如何使用pymysql连接数据库