通过C语言函数实现单链表的逆转操作

例:

输入数据1,2,3,4

输出数据4,3,2,1

一共三个文件:

头文件stulist,h :链表结点的定义,结点指针的定义

源文件stulist.c:具体的实现函数,主要包括三个,打印链表,创建链表和反转链表

测试文件test.c:调用实现功能;

stulist.c文件内容

 include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"stulist.h" List Reverse(List L) {
List head, p, q, r;
head = L;
p = L;
int n=;
while (p->Next) { //统计链表长度,使p指针指向最后一个结点
n++;
p = p->Next;
}
n++;
if (n == ) { //如果链表只有一个结点,直接返回
return head;
}else if (n == ) { //如果链表有两个结点,单独操作,实现反转
p = head;
q = p->Next;
head->Next = NULL;
q->Next = p;
head = q;
return head;
}
else { //如果链表有三个或三个以上结点,则通过三个指针交互操作,实现链表反转,此处遍历到最后一结点后单独操作,并将头结点指向该节点。
p = head; //p指向第一个结点,q指向第二个结点,r指向第三个结点
q = p->Next;
r = q->Next;
head->Next = NULL;
for (int i = ; i < n - ; i++) {
q->Next = p;
p = q;
q = r;
r = r->Next;
}
head = q;
head->Next = p;
}
return head; //返回头结点
}
List Read() /* 细节在此不表 */
{
//创建一个链表
List head, p,q;
int data;
head = NULL;
q = head;
while () {
printf("请输入学生记录:\n");
scanf("%d", &data);
if (data < ) {
break;
}
p = (PtrToNode)malloc(sizeof(List));
p->Data = data;
if (head == NULL) {
head = p;
}
else {
q->Next = p;
}
q = p;
if (head != NULL) {
q->Next = NULL;
}
}
return head;
}
void Print(List L) /* 细节在此不表 */
{
List p;
p = L;
printf("记录\n");
int i = ;
while (p) {
printf("%d\t%d\n",i, p->Data);
p = p->Next;
i++;
}
}

stulist,h文件

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof (struct stu_node)
typedef struct Node *PtrToNode;
struct Node {
int Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
typedef int ElementType;

test.c文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stulist.h" int main()
{
List L1, L2;
L1 = Read();
Print(L1);
L2 = Reverse(L1);
Print(L2); char mmmmm[];
gets_s(mmmmm);
getchar();
return ;
}

数据结构1_C---单链表的逆转的更多相关文章

  1. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

  2. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  3. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  4. PTA 单链表分段逆转

    6-9 单链表分段逆转 (25 分)   给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转.例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1 ...

  5. python 数据结构之单链表的实现

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...

  6. 数据结构(一) 单链表的实现-JAVA

    数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...

  7. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...

  8. 数据结构 - 动态单链表的实行(C语言)

    动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...

  9. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

  10. 数据结构(2):单链表学习使用java实现

    单链表是单向链表,它指向一个位置: 单链表常用使用场景:根据序号排序,然后存储起来. 代码Demo: package com.Exercise.DataStructure_Algorithm.Sing ...

随机推荐

  1. 在命令行已经pip install flask-script,但是导包时出错

    问题:(已经安装好了flask-script,但是导入不成功) 然后在代码中导入相应的包:(报红) 后来发现是在自己创建项目的时候勾选的是创建的是在虚拟环境下的项目,所以环境有问题 所以我应该在虚拟环 ...

  2. 松软科技课堂:SQLUNION和UNIONALL操作符

    SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每 ...

  3. Vuex,从入门到...

    Vuex 是什么? 官方是这么说的:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 不懂? ...

  4. 亮剑.NET学习札记

    学习前提要: 因为书的版本过老,有些章节不学了,要学的包括以下章节 暂定:1,2,4,5,6,7,9,10,11,12,13,14,15,16,17,18,附录A 第一章:主要是介绍.NET,包括面向 ...

  5. Recovery启动流程--recovery.cpp分析

    这篇文章主要通过分析高通recovery目录下的recovery.cpp源码,对recovery启动流程有一个宏观的了解. 当开机以后,在lk阶段,如果是recovery,会设置boot_into_r ...

  6. SpringBoot的注解注入功能移植到.Net平台(开源)

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  7. php 上传word文件 Word文件转 PDF

    说一下,之前的时候做上传word文档转pdf的项目时候, 通过安装open office 连接服务组件, 遇到种种问题, 例如上传的word文档版本,, word文档中编辑的样式复杂会出现转pdf失败 ...

  8. Mysql学习笔记整理之引擎

    mysql的引擎: myisam引擎 Mysql 5.5之前默认的存储引擎 数据.索引分别存储 (数据物理磁盘---索引物理磁盘) .MYD 存储数据                      表级索 ...

  9. Python的未来发展方向

    Python是一种跨平台的计算机程序设计语言. 是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. ...

  10. eclipse快捷键——纪念我突然失忆的脑子

    常用快捷键 1.快速new出来一个对象    Alt+/ 2.快速格式化代码              Ctrl+I 3.快速导入包                     Ctrl+Shift+O