本题要求实现一个函数,将给定的单链表逆转。

函数接口定义:

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分)两种实现方法。相关推荐

  1. 6-1 单链表逆转 (20分)

    本题要求实现一个函数,将给定的单链表逆转. 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; ...

  2. pta:6-1单链表逆转(20分)

    大一下半期数据结构 数据结构实践任务2 pta:单链表逆转 这是一个新手小白学数据结构所经历的所有题目集. 本题要求实现一个函数,将给定的单链表逆转. 函数接口定义: List Reverse( Li ...

  3. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu

    6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...

  4. 6-1 单链表逆转分数 20

    本题要求实现一个函数,将给定的单链表逆转. 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; ...

  5. 2-2 学生成绩链表处理 (20 分)

    2-2 学生成绩链表处理 (20 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node * ...

  6. 6-4 单链表插入排序 (15分)

    6-4 单链表插入排序 (15分) 单链表插入排序 ###目的: 掌握单链表的应用和插入排序的思想. ###内容: 编写一个函数insertion_sort,对一个无序单链表采用插入排序的方式,将其按 ...

  7. java 链表逆转_java 实现单链表逆转详解及实例代码

    java 实现单链表逆转详解 实例代码: class Node { Node next; String name; public Node(String name) { this.name = nam ...

  8. 单链表操作之合并两个单链表

    ***单链表操作之合并两个单链表*** /*  本篇博客为合并两个单链表, 有序和无序都可以: 其中用到单链表的尾插和单链表的选择排序: @单链表排序之选择排序链接:http://blog.csdn. ...

  9. 有苦有乐的算法 --- 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点

    题目 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点. 解析 第一步,判断链表是有环链表还是无环链表: 如果一个单链表无环,它一定有一个指向null的尾结点: 如 ...

最新文章

  1. ORA-00942:表或视图不存在(低级错误)
  2. obj + mtl 格式说明
  3. Confluence 6 下载和安装 MySQL 驱动
  4. Vue指令之v-for——迭代数组、迭代对象中的属性、迭代数字||v-for循环中key属性的使用
  5. 2017-10-17 开源非英文关键词编程语言
  6. 在cshtml中显示FCKeditor编辑器控件
  7. CodeForces - 830C Bamboo Partition(数学+推公式)
  8. s4800扫描电镜的CSS3_Hitachi S-4800型场发射扫描电子显微镜+能谱
  9. lichee linux nfs,SPI Flash 系统编译
  10. 架构设计-数据访问层简述
  11. 华为P50为屠榜而来:搭载超高像素1/1.18英寸大底主摄
  12. DefaultNetworkCredentials vs DefaultCredentials
  13. mysql整段注释_MySQL 添加注释(comment)
  14. 智能解方程计算机在线使用,作业帮计算器在线使用
  15. axure文件如何加密_Axure教程:密码可见与不可见的切换设置
  16. 对讲机有哪些?如何选购对讲机?
  17. Jmeter性能测试报告导出
  18. 1024程序员节来喽
  19. 算法时间复杂度计算方法
  20. Epub 阅读器 - iOS

热门文章

  1. Ubuntu日常使用问题杂记
  2. 使用Visual Studio Code工具创建Vue项目并运行
  3. 渣本安卓客户端Android秋招总结(重排了字号)
  4. 海洋霸权和Libra
  5. 历代魅族旗舰手机主要参数对比,更新于2021年5月
  6. Linux(CentOS7)治理组件nacos(2.0.3版本)单机/集群安装部署详细图解
  7. Google Cloud Platform 学习笔记(二)
  8. linux查gunicorn进程,linux 优雅的退出/关闭/重启gunicorn进程
  9. 東京喰種_经典台词中日双语4
  10. pyqt5开发桌面应用时如何使用pymysql连接数据库