【23王道数据结构】链表课后题25,【2019统考真题】设线性表L=·······

本文主要是介绍【23王道数据结构】链表课后题25,【2019统考真题】设线性表L=·······,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路:
请添加图片描述
时间复杂度 O(N) 空间复杂度O(1)

主要代码

void operate(LinkList &L) {if (L->next == NULL ||L->next->next == NULL ||L->next->next->next == NULL) return; //空链表,一个元素的链表,两个元素的链表不用操作int length = 0;LNode *p = L, *q; //q指向后半段的第一个元素 while (p->next) {length++;p = p->next;} int m = (1 + length) / 2; //用于确定q的位置p = L; //重定向Pwhile (m--) {p = p->next;} q = p->next; //找到位置p->next = NULL; //断开q及其以后节点invert(q); //逆置q,没有头结点; //奇数的话,第m个元素不用处理 m = (1 + length) >> 1;if (length % 2 != 0) m = m - 1;p = L;//将p指向头结点 for (int i = 0; i < m; i++) {p = p->next; //仔细思考 LNode *t = q;q = q->next; //对p执行后插 t->next = p->next;p->next = t;p = p->next;}}void invert(LinkList &L) {//构造头结点 LinkList Head; //头结点 Head = (LNode *)malloc(sizeof(LNode));Head->next = NULL;//逆置LNode *p = L; //这里L是无头结点的 while (p) {LNode *t = p;p = p->next;//头插 t->next = Head->next;Head->next = t;} //print(Head); L = Head->next; //将P指向第一个元素 //释放创建的头结点 free(Head); 
} 

全部代码

#include <iostream>
#include <stdlib.h>using namespace std;typedef struct LNode {int data;struct LNode *next;
}LNode, *LinkList;//尾插法
void TailInsert(LinkList &L); 
//遍历 
void print(LinkList L);void operate(LinkList &L); //无头结点的逆置 
void invert(LinkList &L); int main(void) {LinkList L;L = (LNode *)malloc(sizeof(LNode));L->next = NULL; //初始化 TailInsert(L);operate(L); cout << "main函数里:"; print(L);
} void print(LinkList L) {if (L->next == NULL) return;printf("链表中的元素如下:\n"); LNode *t = L->next; //指向第一个节点 while(t!= NULL) {printf("%d ",t->data);t = t->next;} printf("\n");
}void TailInsert(LinkList &L) {LNode *tail, *t;tail = L;int x;printf("请输入待插入的元素,以-1表示结束:\n"); scanf("%d",&x);while (x != -1) {t = (LNode*)malloc(sizeof(LNode));t->data = x;t->next = NULL;tail->next = t;tail = t;scanf("%d",&x);}
}
void operate(LinkList &L) {if (L->next == NULL ||L->next->next == NULL ||L->next->next->next == NULL) return; //空链表,一个元素的链表,两个元素的链表不用操作int length = 0;LNode *p = L, *q; //q指向后半段的第一个元素 while (p->next) {length++;p = p->next;} int m = (1 + length) / 2; //用于确定q的位置p = L; //重定向Pwhile (m--) {p = p->next;} q = p->next; //找到位置p->next = NULL; //断开q及其以后节点invert(q); //逆置q,没有头结点; //奇数的话,第m个元素不用处理 m = (1 + length) >> 1;if (length % 2 != 0) m = m - 1;p = L;//将p指向头结点 for (int i = 0; i < m; i++) {p = p->next; //仔细思考 LNode *t = q;q = q->next; //对p执行后插 t->next = p->next;p->next = t;p = p->next;}}void invert(LinkList &L) {//构造头结点 LinkList Head; //头结点 Head = (LNode *)malloc(sizeof(LNode));Head->next = NULL;//逆置LNode *p = L; //这里L是无头结点的 while (p) {LNode *t = p;p = p->next;//头插 t->next = Head->next;Head->next = t;} //print(Head); L = Head->next; //将P指向第一个元素 //释放创建的头结点 free(Head); 
} 

这篇关于【23王道数据结构】链表课后题25,【2019统考真题】设线性表L=·······的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791103

相关文章

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In