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

news/2024/9/23 15:32:30/

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

第一种——头插法

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

代码实现:

#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.ppmy.cn/news/1426090.html

相关文章

第四届大数据工程与教育国际会议(BDEE 2024)即将召开!

第四届大数据工程与教育国际会议&#xff08;BDEE 2024&#xff09;将于2024年8月9-11日在泰国清迈举行。数据驱动教育变革&#xff0c;智慧点亮未来课堂&#xff01;BDEE 2024是专注于大数据工程与教育领域的重要学术会议&#xff0c;全球大数据与教育精英齐聚&#xff0c;在数…

Electron 30.0.0 发布,升级 Node 和 V8 引擎

近日&#xff0c;Electron 30.0.0 正式发布&#xff01;你可以通过 npm install electronlatest 进行安装&#xff0c;或者从 Electron 的发布网站下载&#xff0c;继续阅读了解此版本的详细信息。 &#x1f525; 主要更新 Windows 上支持 ASAR 完整性融合。如果未正确配置&am…

Python的parse.quote_plus作用

parse.quote_plus 是 Python 标准库 urllib.parse 模块中的一个函数。它用于对字符串进行编码&#xff0c;以便将其作为 URL 的一部分安全地传输。 这个函数主要用于将字符串中的特殊字符转换为 URL 编码的形式。例如&#xff0c;空格会被转换为 %20&#xff0c;加号 () 会被转…

springboot中thymeleaf模板引用页面总结

1、先创建一个需要被引用的html页面&#xff0c;在页面里面不需要放公共的css、js&#xff0c;只需要写一些html片段即可&#xff0c;但是需要在外层html添加上th:fragment属性&#xff0c;如下所示&#xff1a; <div th:fragment"common_top"><ul><…

Spring Boot集成fastdfs快速入门Demo

1.什么是fastdfs FastDFS 是一个开源的高性能分布式文件系统&#xff08;DFS&#xff09;。它的主要功能包括&#xff1a;文件存储&#xff0c;文件同步和文件访问&#xff0c;以及高容量和负载平衡。主要解决了海量数据存储问题&#xff0c;特别适合以中小文件&#xff08;建议…

Docker(二)Docker+ server部署极简前端页面

本篇文章介绍如何使用 Dockerserver 将一个极简前端页面进行部署 1.本地运行一个简单的前端页面&#xff0c;再把它部署到服务器上 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

PHP 爬虫如何配置代理 IP(CURL 函数)

在 PHP中 配置代理IP&#xff0c;可以通过设置 CURL 库的选项来实现&#xff0c;代码如下&#xff1a; 当然你要有代理ip来源&#xff0c;比如我用的这个 代理商 &#xff0c;如果想服务稳定不建议找开源代理池&#xff0c;避免被劫持。 <?php // 初始化cURL会话 $ch cu…

【力扣 | 分享】高频 SQL 50 题(基础版)

题单 查询可回收且低脂的产品寻找用户推荐人大的国家文章浏览 I无效的推文 连接使用唯一标识码替换员工ID产品销售分析 I进店却未进行过交易的顾客上升的温度每台机器的进程平均运行时间员工奖金学生们参加各科测试的次数至少有5名直接下属的经理确认率有趣的电影平均售价项目员…