单链表逆置(头插法,递归,数据结构栈的应用)

news2024/11/25 4:33:05

链表逆置就是把最后一个数据提到最前面,倒数第二个放到第二个……依次类推,直到第一个到最后一个。
由于链表没有下标,所以不能借助下标来实行数据的逆置,要靠空间的转移来完成链表的逆置,这里采用没有头节点的链表来实现逆置。

第一种——头插法

算法思想:逆置链表,初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。

代码实现:

#include<iostream>
using namespace std;//单链表逆置 
typedef int type;
typedef struct link{
	type data;
	struct link *next;
}link,*list;
int main(){
	list head=new link;
	head->next=NULL;
	link *p,*r=head;
	int x;
	cout<<"请决定为单链表输入几个数值: "; 
	cin>>x;
	for(int i=0;i<x;i++){
		p=new link;
		cout<<"请输入第"<<i+1<<"个数值:"; 
		cin>>p->data;
		p->next=r->next;
		r->next=p;
		r=p;
	}
	cout<<"单链表的内容为: ";
	p=head->next;
	for(int i=0;i<x;i++){
		cout<<p->data<<"  ";
		p=p->next; 
	}
	link *q;
	p=head->next;
	head->next=NULL;
	while(p!=NULL){
		q=p;
		p=p->next;
		q->next=head->next;
		head->next=q;
	}
	cout<<endl<<"单链表的内容为: ";
	p=head->next;
	for(int i=0;i<x;i++){
		cout<<p->data<<"  ";
		p=p->next; 
	}
	return 0;
}

运行结果:

第二种——递归

代码实现:

#include<iostream>
using namespace std;//单链表逆置 
typedef int type;
typedef struct link{
	type data;
	struct link *next;
}link,*list;
link* traverse(list head);
int main(){
	link *p,*r,*head;
	int x;
	cout<<"请决定为单链表输入几个数值: "; 
	cin>>x;
	p=new link;
	cout<<"请输入第"<<1<<"个数值:"; 
	cin>>p->data;
	p->next=NULL;
	head=p;
	r=head;
	for(int i=1;i<x;i++){
		p=new link;
		cout<<"请输入第"<<i+1<<"个数值:"; 
		cin>>p->data;
		p->next=r->next;
		r->next=p;
		r=p;
	}
	cout<<"单链表的内容为: ";
	p=head;
	for(int i=0;i<x;i++){
		cout<<p->data<<"  ";
		p=p->next; 
	}
	head=traverse(head);
	cout<<endl<<"单链表的内容为: ";
	p=head;
	for(int i=0;i<x;i++){
		cout<<p->data<<"  ";
		p=p->next; 
	}
	return 0;
}
link* traverse(list head){
	if(head->next==NULL){
		return head;
	}
	link *p=traverse(head->next);
	head->next->next=head;
	head->next=NULL;
	return p;
}

运行结果:
第三种——利用栈存储结构

#include<iostream>
using namespace std;//单链表逆置 
typedef int type;
typedef struct link{
	int data;
	struct link *next;
}link,*list;
int main(){
	list s=NULL;
	link *p;
	int x;
	int *a=new int[100];
	cout<<"请决定为单链表输入几个数值: "; 
	cin>>x;
	for(int i=0;i<x;i++){
		p=new link;
		cout<<"请输入第"<<i+1<<"个数值:"; 
		cin>>p->data;
		a[i]=p->data;
		p->next=s;
		s=p;
	}
	cout<<"单链表的内容为: ";
	for(int i=0;i<x;i++){
		cout<<a[i]<<"   "; 
	}
	cout<<endl<<"逆置后单链表的内容为: ";
	for(int i=0;i<x;i++){
		p=s;
		cout<<p->data<<"  ";
		s=s->next;
		delete p;
	}
	return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1607342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM项目前后端分离详细说明

1.后端 1.1打包 说明&#xff1a;使用idea打开项目&#xff0c;然后进行打包。 1.2tomcat 说明&#xff1a;把后端打成war包后放入tomcat启动。 1.3启动tomcat 说明&#xff1a; 找到tomcat中bin目录中的startup.bat文件&#xff0c;进行启动。如果启动失败&#xff0c;可以…

【英文演讲】人工智能,Artificial Intelligence: A Glimpse into the Future World

文章目录 1、Power Point(演示文稿)2、Speech manuscript(演讲稿)【假】序言:在这个充满机遇与挑战的时代,人工智能正以惊人的速度改变着我们的生活与工作方式。它不仅是一种技术,更是一种全新的思维方式,引领着我们走向未来世界的新篇章。本次演讲将深入探讨人工智能对…

wechat机器人个性化维护部署修改

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 服务端部署配置 在新服务器上安装mysql8.0 ,redis ,nginx,emqx修改数据库的远程访问权限&#xff0c;导入数据库文件application.yml中修改redis的信息application-druild.yml中修改数据…

一文详解视觉Transformer模型压缩和加速策略(量化/低秩近似/蒸馏/剪枝)

视觉Transformer&#xff08;ViT&#xff09;在计算机视觉领域标志性地实现了一次革命&#xff0c;超越了各种任务的最先进模型。然而&#xff0c;它们的实际应用受到高计算和内存需求的限制。本研究通过评估四种主要的模型压缩技术&#xff1a;量化、低秩近似、知识蒸馏和剪枝…

【基础】gcc-动态库和静态库的创建和使用-命令

目录 1 动态库的建立使用2 动态库封装过程2.1 编译动态库2.2 使用动态库2.3 命令参数说明 3 静态库封装过程3.1 静态库的封装3.2 静态库的使用 1 动态库的建立使用 首先建立一个头文件&#xff0c;和三个.cpp文件&#xff0c;目的是要把这些文件链接成动态库&#xff1a; 其中…

C++数组的创建、初始化、传参

C数组创建 静态数组&#xff1a;填入具体的大小 type arrayName [arraySize];动态数组&#xff1a;在运行时分配内存。 int* arrnew int[5]; //当程序使用完new分配的内存时&#xff0c;应使用delete释放他们 delete []arr;用标准库容器&#xff1a;std::vector 可以动态增长…

Python 异常处理深度解析:掌握健壮代码的关键

文章目录 1. 异常处理的基础1.1 使用 try 和 except1.2 捕获多种异常 2. 高级异常处理2.1 捕获所有异常2.2 使用 else 和 finally 3. 异常链与自定义异常3.1 异常链3.2 自定义异常 有效管理和处理异常是构建健壮、可靠和用户友好应用程序的基石。异常处理不仅有助于防止程序意外…

衣康酸(ITA)应用领域广泛 工业发酵法为其主流制备方法

衣康酸&#xff08;ITA&#xff09;应用领域广泛 工业发酵法为其主流制备方法 衣康酸&#xff08;ITA&#xff09;又称亚甲基丁二酸、甲叉琥珀酸&#xff0c;化学式为C5H6O4&#xff0c;是一种不饱和二元有机酸。衣康酸外观呈白色结晶粉末&#xff0c;含强烈刺激性气味&#xf…

Spring Boot 框架集成Knife4j

本次示例使用 Spring Boot 作为脚手架来快速集成 Knife4j,Spring Boot 版本2.3.5.RELEASE,Knife4j 版本2.0.7&#xff0c;完整代码可以去参考 knife4j-spring-boot-fast-demo pom.xml 完整文件代码如下 <?xml version"1.0" encoding"UTF-8"?> &l…

看现货白银平台测评要注意的几个事项

在网上我们会看到很多现货白银平台测评的文章或短视频&#xff0c;我们要注意&#xff0c;这些测评内容包括本文在内&#xff0c;多少都会存在着一些主观性的东西&#xff0c;这是无可避免的。不过在看现货白银平台测评时&#xff0c;有一些客观的东西&#xff0c;是需要我们留…

专注底层技术创新,超高性能公链新星 Sui Network 有何独特优势?

近年来&#xff0c;Sui Network 为了能够打造让开发者低成本实现广泛应用开发的公链环境付诸实际行动。其建立了以对象为中心的数据模型、在交易签名和 PTB 中实现精细化权限、优化用户友好功能&#xff0c;逐步为开发者和用户提供了一个更为灵活、安全的链上运行环境。在优越技…

【吊打面试官系列】Java高并发篇 -为什么使用 Executor 框架比使用应用创建和管理线程好?

大家好&#xff0c;我是锋哥。今天分享关于 【为什么使用 Executor 框架比使用应用创建和管理线程好&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 为什么使用 Executor 框架比使用应用创建和管理线程好&#xff1f; 为什么要使用 Executor 线程池框架 1、每…

springboot 载入自定义的yml文件转DTO

改进方法&#xff0c;直接spring注入 import cn.hutool.json.JSONUtil; import org.springframework.beans.factory.config.YamlMapFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import …

开抖音小店需要用到哪些软件?全部都给大家整理好了,快来看看!

哈喽~我是电商月月 在抖音小店的运营过程中&#xff0c;选品上架&#xff0c;售后客服都是要靠软件辅助进行的 那开抖音小店到底会用到哪些软件&#xff1f;这些平台都叫什么&#xff1f; 今天我就给大家介绍一下抖音小店运营过程中会使用到的软件&#xff0c;干货满满&…

图片/视频上传(超简单教程)

#应用场景# 该后端开发接口适用 图片/视频上传&#xff0c;返回路径名称场景 1.视频上传 写在Controller层 这里只是一个接收&#xff0c;调用uploadObject方法上传oss public OmsResult<FileUploadDto> goodsUploadVideo(RequestParam(value "file") Mu…

SQL优化——执行计划

文章目录 1、获取执行计划常用方法1.1、使用AUTOTRACE查看执行计划1.2、使用EXPLAIN PLAN FOR查看执行计划1.3、查看带有A-TIME的执行计划1.4、查看正在执行的SQL的执行计划 2、定制执行计划3、怎么通过查看执行计划建立索引4、运用光标移动大法阅读执行计划 SQL执行缓慢有很多…

ubuntu环境下使用g++把c++编译成汇编语言(暂时)

1. 引言 为了深入理解c&#xff0c;决定学习一些简单的汇编语言。使用ubuntu系统下g很容易将一个c的文件编译成汇编语言。本文使用此方法&#xff0c;对一个简单的c文件编译成汇编语言进行理解。 2.示例 文件名&#xff1a;reorder_demo.cpp #include<stdio.h>typede…

【网络运维知识】—路由器与交换机区别

【网络运维知识】—路由器与交换机区别 一、路由器&#xff08;Router&#xff09;和交换机&#xff08;Switch&#xff09;对比1.1 功能1.2 转发方式1.3 范围1.4 处理方式 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 路由器&#xff08…

MySQL8.0 一主二从

1. 系统环境 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)192.168.183.137 mysql-master 192.168.183.153 mysql-slave-1 192.168.183.154 mysql-slave-2# 关闭SELINUX sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config seten…

基于SpringBoot的幼儿园管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7 数据表&#xff1a;16张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;html 后端技术&#xff1a;SpringBoot 功能简介 项目获取关键字&#xff1a;幼儿园 该…