数据结构:单链表逆置
实验要求:
写出将单链表逆置的算法。即令单链表的第一个结点变为最后一个结点,第二个结点变为倒数第二个结点,…,最后一个结点变为第一个结点。
依次从键盘读入数据,逆序建立链表L;
逆置链表L(创建新的链表New保存逆置的结点);
代码解析:
主函数int main():
定义链表的长度n;
调用CreateList函数创建长度为n的链表;
调用InvertList函数将链表内元素转置并输出;
定义链表的结构体类型为LNode,规定结点的数据域和结点的指针域
定义函数struct LNode *CreatList(int n)逆位序创建链表并输出所创建的链表的元素值。
定义需要创建的链表元素个数n;
建立一个带头结点的单链表;
逆序位输入指定元素个数的链表元素数值;
输入逆序位建立链表的链表元素;
定义函数void InverList(struct LNode *L)转置链表内元素并输出。
建立一个带头结点的新链表r;
q指向链表的第一个元素;
开辟新结点s,将q的值赋给s;
令s->next为NULL并使其成为r的后续结点;
利用while循环,将q不断后移,指向链表的后续元素。开辟新结点p,将q的值 赋给p,将p插入结点s和结点i中间;
令s的指针指向p;
输出转置后的链表;
实验代码:
#include <stdio.h>
#include <stdlib.h>//定义链表类型
struct LNode{int data; //结点的数据域struct LNode *next; //结点的指针域
};//创建逆序链表
struct LNode *CreatList(int n)
{struct LNode *L,*p;printf("请输入逆序创建链表的元素的个数:\n"); //确定链表元素的个数scanf("%d",&n);L = (struct LNode*)malloc(sizeof(struct LNode)); L->next = NULL; //建立一个带头结点的单链表printf("请输入逆序链表元素:\n");while(n--){ //逆序位输入n个元素的数值p=(struct LNode*)malloc(sizeof(struct LNode)); scanf("%d",&p->data ); //输入指定元素个数的链表元素数值p->next = L->next ;L->next =p;}printf("输出链表中的元素:\n"); //直接输出所创建的逆序链表while(p!=NULL){if(p->next ==NULL)printf("%d\n",p->data );elseprintf("%d\t",p->data );p=p->next ;}return L;
}//转置链表内元素并输出
void InvertList(struct LNode *L)
{struct LNode *p,*q,*r,*s,*t;r = (struct LNode*)malloc(sizeof(struct LNode)); s = (struct LNode*)malloc(sizeof(struct LNode));r->next=NULL; //建立一个带头结点新链表q=L->next; //q指向链表第一个元素 s->data=q->data;s->next=NULL;r->next=s;while(q->next !=NULL) {q=q->next;p = (struct LNode*)malloc(sizeof(struct LNode));p->data=q->data;p->next=s;r->next=p;s=p;}printf("输出转置后的链表:\n");t=r->next; while(t!=NULL) //直接输出转置后的链表 {printf("%d\t",t->data );t=t->next ;}printf("\n");
}//主函数
int main()
{int n;struct LNode *L;L=CreatList(n);InvertList(L);
}
数据结构:单链表逆置相关推荐
- 【数据结构】无头节点的单链表逆置
day1 牛客网刷题 C语言实现单链表逆置 C语言实现单链表逆置 由于一段时间没有用数据结构 刚开始有些忘记了 第一次真正在牛客网上进行调试 原来还会有调试用例 还要设置边界值 如果没有 测试也不会通 ...
- java数据结构之单链表逆置算法
单链表逆置算法1 设计思想:在链表类中新加成员方法getNode(int i),用来获取指定位置的节点,新建一个空单链表,将原链表的每个节点按照从后往前的顺序依次取出,再把节点的数据依次添加到新的链表 ...
- c语言借助栈单链表逆置,借助栈实现单链表逆置--数据结构
标题: 借助栈实现单链表逆置 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 用链式存储实现栈的初始化.入栈.出栈.取栈顶.判栈空等操作,在主函数中借助栈的基本 ...
- 数据结构03:单链表逆置
单链表逆置 单链表原地逆置 单链表利用栈逆置 .cpp文件 运行结果 单链表原地逆置 List Reverse(List L1){/*构造链表q替代L1(使得在逆置链表的时候L1本身不变)* 构造完以 ...
- 【数据结构】单链表逆置的详解
单链表的逆置 将单链表逆置: 定义一个前指针和一个后指针用来辅助工作指针 //头文件 #ifndef LINKLIST_H_INCLUDED #define LINKLIST_H_INCLUDEDst ...
- 单链表操作10-带头结点的单链表逆置(个人学习笔记,仅供参考)
带头结点的单链表逆置 题目要求 单链表结点定义 函数接口定义 测试程序样例 输入样例 输出样例 答案 题目要求 设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出 ...
- 借助于栈结构将一个单链表逆置
借助于栈结构将一个单链表逆置. 输入输出样例:1组 #1 样例输入: 5 //链表中有几个元素 1 2 3 4 5 //链表中的元素分别是什么 样例输出: 5 4 3 2 1 //逆置后输出,利用栈结 ...
- C语言实现不带头结点的单链表逆置的三种方法
C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...
- 7-4 单链表基础应用(4)--单链表逆置
编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现: (1) 根据输入信息创建单链表并输出所有结点信息.每个学生的信息包括姓名和成绩: (2) 将上一步创建的单链表逆置后并输出所有结点信 ...
最新文章
- react中使用create-react-app创建项目执行函数两次
- 数据结构:回溯--解决八皇后问题
- mysql 以数组的形式插入更新表
- when will ifm open?
- SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
- libreoffice Error: source file could not be loaded
- 华为交换机默认vlan都是通的吗_华为设备二层交换技术——Hybrid接口详解
- django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)
- 程序员合同日期不到想辞职_辞职报告怎么写最简单?写清楚理由和时间,签上姓名就OK了...
- WPF杂难解 中文字体显示模糊
- HarmonyOS 正式登陆华为手机,4月陆续升级!
- 选择数据分析工具应考虑4个因素
- vs2010 sp1安装
- dojo基础:dojo/request
- Swagger设置密码登录
- docker 安装mysql,不区分大小写配置
- Vue中使用Tinymce-edtio
- 【收藏】Mimics Lnnovation Suite之导出功能
- 国家统计局举办开放日 称将迎接“大数据”挑战
- MDA(模型驱动架构)