当前位置: 首页 > news >正文

数据结构1_C---单链表的逆转

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

例:

输入数据1,2,3,4

输出数据4,3,2,1

一共三个文件:

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

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

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

stulist.c文件内容

 1 include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include"stulist.h"
 5 
 6 List Reverse(List L) {
 7     List head, p, q, r;
 8     head = L;
 9     p = L;
10     int n=0;
11     while (p->Next) {             //统计链表长度,使p指针指向最后一个结点
12         n++;
13         p = p->Next;
14     }
15     n++;
16     if (n == 1) {                //如果链表只有一个结点,直接返回
17         return head;
18     }else if (n == 2) {          //如果链表有两个结点,单独操作,实现反转
19         p = head;
20         q = p->Next;
21         head->Next = NULL;
22         q->Next = p;
23         head = q;
24         return head;
25     }
26     else {                       //如果链表有三个或三个以上结点,则通过三个指针交互操作,实现链表反转,此处遍历到最后一结点后单独操作,并将头结点指向该节点。
27         p = head;                 //p指向第一个结点,q指向第二个结点,r指向第三个结点
28         q = p->Next;
29         r = q->Next;
30         head->Next = NULL;
31         for (int i = 0; i < n - 2; i++) {
32             q->Next = p;
33             p = q;
34             q = r;
35             r = r->Next;
36         }
37         head = q;
38         head->Next = p;
39     }
40     return head;                    //返回头结点
41 }
42 List Read() /* 细节在此不表 */
43 {
44     //创建一个链表
45     List head, p,q;
46     int data;
47     head = NULL;
48     q = head;
49     while (1) {
50         printf("请输入学生记录:\n");
51         scanf("%d", &data);
52         if (data < 0) {
53             break;
54         }
55         p = (PtrToNode)malloc(sizeof(List));
56         p->Data = data;
57         if (head == NULL) {
58             head = p;
59         }
60         else {
61             q->Next = p;
62         }
63         q = p;
64         if (head != NULL) {
65             q->Next = NULL;
66         }
67     }
68     return head;
69 }
70 void Print(List L) /* 细节在此不表 */
71 {
72     List p;
73     p = L;
74     printf("记录\n");
75     int i = 1;
76     while (p) {
77         printf("%d\t%d\n",i, p->Data);
78         p = p->Next;
79         i++;
80     }
81 }

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[10];
    gets_s(mmmmm);
    getchar();
    return 0;
}

 

转载于:https://www.cnblogs.com/liuhui5599/p/9240749.html

相关文章:

  • 5.条件,循环和其他语句
  • C++虚函数和多态性的关系【virtual】之一
  • 预编译理解
  • [拒绝毒瘤的小清新系列] give you a tree
  • 代码
  • c++ 前向引用详细解说
  • telnet不能用!!!提示:-bash: telnet: command not found
  • objective-c类别(Category)详细解说
  • 【3dsmax2016】安装图文教程、破解注册以及切换语言方法
  • 需要谈谈的 游戏测试改良流程(二)
  • python实现批量修改文件名
  • 需要谈谈 游戏测试的一些事项(四)
  • 性能测试day02_预习知识
  • selenium python 启动Firefox
  • 需要谈谈的游戏测试(五)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Apache Pulsar 2.1 重磅发布
  • Electron入门介绍
  • interface和setter,getter
  • java第三方包学习之lombok
  • Linux快速复制或删除大量小文件
  • php的插入排序,通过双层for循环
  • React 快速上手 - 07 前端路由 react-router
  • Redis学习笔记 - pipline(流水线、管道)
  • Spark RDD学习: aggregate函数
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Zepto.js源码学习之二
  • 多线程事务回滚
  • 目录与文件属性:编写ls
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 怎样选择前端框架
  • raise 与 raise ... from 的区别
  • 第二十章:异步和文件I/O.(二十三)
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #ifdef 的技巧用法
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (C)一些题4
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (九)信息融合方式简介
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • ***详解账号泄露:全球约1亿用户已泄露
  • .net 7 上传文件踩坑
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .Net Web窗口页属性
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net的socket示例
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET中GET与SET的用法