数据结构:单向链表的反转
文章目录
- 单链表的反转
- 1.头插法
- 1.1思路
- 1.2代码实现
- 2.就地逆置法
- 2.1思路
- 2.2代码实现
单链表的反转
本文主要介绍头插法逆置和就地逆置法实现链表的反转
1.头插法
1.1思路
迭代方式的链表反转操作核心是从链表头到链表尾
首先让创建一个temp指针使其指向头节点的下一个节点,并将其取出
取出之后让新创建的reverseNode节点指向刚取出的节点,反复进行上述操作。需要注意的是每次取出节点之前,需要用另外一个指针暂存temp指向的节点的下一个节点,防止temp指针变化后找不到新的节点。
最后让初始的头节点指向初始链表中的尾节点。
1.2代码实现
/*** 反转链表*/public void reverseList(){//链表为空或者只有一个节点不需要反转直接返回if (headNode.next == null || headNode.next.next == null){return;}//定义一个辅助指针遍历原来的链表HeroNode temp = headNode.next;//指向temp指针指向的节点的下个节点HeroNode next = null;//新创建的头节点HeroNode reverseHeadNode = new HeroNode(0,"","");//遍历原来的链表,每遍历一个节点,就将其取出,放在新的链表reverseHeadNode的最前端while (temp != null){//暂时保存当前节点的下一个节点,防止变化指针后找不到后续的数据next = temp.next;//让temp的下一个节点指向新的链表的最前端 //reverseHeadNode->Null ------> reverseHeadNode->temp->Nulltemp.next = reverseHeadNode.next;reverseHeadNode.next = temp;//让temp向后移动temp = next;}//将head.next指向reverseHeadNode.next 实现链表的反转headNode.next = reverseHeadNode.next;}
2.就地逆置法
就地逆置法与头插法思想类似,唯一区别在于头插法是通过一个新链表头来实现,而就地逆置法是直接通过遍历链表对链表进行修改。
2.1思路
需要额外借助两个指针(begin和end)
1.初始状态下让begin指向头节点的下一个节点,end指向begin指向的下一个节点
将end指向的节点2从链表取出,添加至链表的头部
- 将end -> begin.next,重复上述操作
此时begin指向的节点已成为链表尾,退出遍历,完成逆置。
2.2代码实现
/*** 就地逆置法反转链表*/
public void reverse()
{//如果链表为空或者链表中只有一个节点则不需要进行操作直接返回即可if (headNode.next == null || headNode.next.next == null){return;}HeroNode begin = headNode.next;HeroNode end = headNode.next.next;while (begin != null){//将end所指节点取出,beg指针指向end的下一个节点begin.next = end.next;//将end所指节点放入当前链表的头部end.next = headNode.next;headNode.next = end;//将end指向下一个节点end = begin.next;}
}
数据结构:单向链表的反转相关推荐
- 数据结构与算法(六)- 单向链表的反转
数据结构与算法(六)- 单向链表的反转 一.头节点插入法 /*** 反转单向链表(头插法)** 1.先定义一个节点reverseHead = new HeroNode()* 2.从头到尾遍历原来的链表 ...
- 数据结构-单向链表解决学生录入问题
数据结构-单向链表 单向链表实现学生录入程序 通过main函数实现一切功能 通过调用函数实现 传送门结束 单向链表实现学生录入程序 将用户输入的不定个数的学生成绩按顺序编号并保存,以用户输入0作为录入 ...
- 数据结构单向链表线性结构_线性数据结构链表为何以及如何解释
数据结构单向链表线性结构 Imagine you have gone to a crowded place, say to a k-pop concert with your friends and ...
- 【单向链表】数据结构——单向链表的介绍与代码实现笔记
从今天开始将修炼数据结构专栏,将持续更新,分模块学习. 数据结构--单向链表 一.数据结构 1.什么是数据结构? 2.逻辑结构和物理结构 二.链表--线性结构 1.首先介绍下链表和数组的区别 2.链表 ...
- 数据结构——单向链表-双向链表
1.单向链表按位置修改 //按位置修改 int updata_pos(linklist *L,int pos,datatype new_e) {if(NULL==L||empty(L)||pos< ...
- 简单数据结构——单向链表
恩,准备重最简单的东西复习和学习一遍.那就从数据结构开始吧. 我尽量用公司的代码标准来进行编码.希望对刚刚开始学习数据结构的有一些帮助吧. 使我的代码可以简单易懂. 我记得上数据结构的第一个程序就是链 ...
- 数据结构—单向链表(详解)
一.链表基础 链表是一种常见的数据结构,其中运用到了结构体指针,链表可以实现动态存储分配,换而言之,链表是一个功能强大的数组,可以在某个节点定义多种数据类型,可以实现任意的添加,删除,插入节点等.链表 ...
- 数据结构 | 单向链表学习总结
单向链表学习总结 简介 总结 链表介绍 链表定义 链表函数 计算链表的长度 将列表转换为链表 LeetCode:剑指 Offer 22. 链表中倒数第k个节点 双向链表学习总结:python | 双向 ...
- 数据结构--单向链表
单向链表的一种Go语言实现 package mainimport "fmt"type Node struct {no intname stringnext *Node }//实现尾 ...
最新文章
- python rjust() 方法 与 ljust()方法 的使用
- [Design] Flyweight Pattern
- 如何使用python找出CPU数量
- CentOS中使用Docker+nginx部署Vue打包的dist项目
- Angular input decorator学习笔记
- css3 loading 效果1
- ECharts 学习笔记
- 最近和很多创业者和中小企业老板沟通
- WCF后传系列(2):深入WCF寻址Part 2—自定义寻址报头
- Yii2修改默认布局
- 搭建SSM项目时报错(org.springframework.jdbc.CannotGetJdbcConnectionException)
- artset下载_artset绘画软件下载
- Java语言实现自动关机程序
- 如果U盘中了文件夹隐藏病毒,怎么办?
- android studio模拟器闪一下,android studio连接雷电模拟器 【AS 模拟器】
- python期末考试是怎么考的_python期末考试复习
- 男友是程序员,看着他压力大我难受。有哪些缓解压力的好方法?
- Untiy InputSystem(一) 新旧API对比
- 文明与征服君士坦丁阵容搭配推荐 文明与征服君士坦丁攻略
- 前端:简述表单提交前如何进行数据验证