Java 单链反转 图解


学习笔记:https://www.bilibili.com/video/BV1B4411H76f?p=22&vd_source=43542de2d5004969a81ea4d3b5a28b2a

  • 题目要求:反转 HeroNode 单链
    在这里插入图片描述

  • 解题思路:创建一个新的链表 ,把数据1插入到 新链表的 reverseHead 和 reverseHead.next 之间,并把head.next的指针指向数据2。
    这样数据1就操作完了,数据2、数据3 以此类推。

  1. 步骤一:创建一个新的链表
    在这里插入图片描述
  2. 步骤二:把数据1 插入到新链表
    在这里插入图片描述
    上图化简后:
    在这里插入图片描述
  3. 步骤三:重复以上步骤
    在这里插入图片描述
    化简后:
    在这里插入图片描述

  • 代码如下:
	//将单链表反转
	public static void reversetList(HeroNode head) {
		//如果当前链表为空,或者只有一个节点,无需反转,直接返回
		if(head.next == null || head.next.next == null) {
			return ;
		}
		
		//定义一个辅助的指针(变量),帮助我们遍历原来的链表
		HeroNode cur = head.next;
		HeroNode next = null;// 指向当前节点[cur]的下一个节点
		HeroNode reverseHead = new HeroNode(0, "", "");
		//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
		//动脑筋
		while(cur != null) { 
			next = cur.next;//先暂时保存当前节点的下一个节点,因为后面需要使用
			cur.next = reverseHead.next;//将cur的下一个节点指向新的链表的最前端
			reverseHead.next = cur; //将cur 连接到新的链表上
			cur = next;//让cur后移
		}
		//将head.next 指向 reverseHead.next , 实现单链表的反转
		head.next = reverseHead.next;
	}
  • 图解代码:
  1. 定义变量 cur 、next
HeroNode cur = head.next;	
next = cur.next;
reverseHead.next = cur;

在head.next指向数据1的时候
此时cur == 数据1
此时next == cur.next,即 head.next.next

在这里插入图片描述
化简后:
在这里插入图片描述
2.

cur = next; //让cur后移

在这里插入图片描述

cur = head.next 变成了 cur = head.next.next,把cur往后移。
数据1没有被引用,进入垃圾回收机制

  1. 进入循环
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值