java实现单链表反转,2种方式

基于Java实现单链表反转的多种方法 基于Java实现单链表反转的多种方法一、原地反转二、新建链表头结点插法三、利用栈结构实现链表的反转四、完整代码奉上 对于单链表不熟悉的可以看一下基于Java实现单链表的增删改查 一、原地反转 1、新建一个哨兵节点下一结点指向头结点 2、把待反转链表的下一节点插入到哨兵节点的下一节点 反转之前的链表:1–>2–>3–>4>–>5 加入哨兵节点:dummp–>1–>2–>3–>4>–>5 原地反转: 定义:prev=dummp.next; 阅读详情

/**
 * @author donye
 *  反转链表的关键就是反转一个节点之后不能丢失后面节点的指针。
 *  递归是从最后向前依次反转
 *  而用while循环则用临时变量来保存相关信息
 */
public class LinkReverseTester {
	public static class Node{
		//直观起见,设置为public
		public int value;
		public Node next;
		public Node(int value, Node next) {
			this.value = value;
			this.next = next;
		}
		@Override
		public String toString() {
			if (next==null) {
				return "Node [value=" + value + "]";
			}
			return "Node [value=" + value + "]  "+next;
		}
		
		
	}
	public static Node reverseByRecursion(Node current){
		//处理基本情况,头结点为空时,或者递归到最后一个节点时
		if (current==null||current.next==null) {
		return current;	
		}
//		当不是基本情况时,递归处理当前操作中的节点的next节点,
//		下面一行代码的目的是让当前节点的下一个节点在待会反转后,确保后续也已经反转。
//		这个方法返回的永远都是反转后的头结点。
		Node headAfterReverse = reverseByRecursion(current.next);
		//将当前节点的next节点反转,指向当前节点,即反转next节点。
		current.next.next=current;
		//当前节点则不再指向next节点
		current.next=null;
		//返回头结点
		return headAfterReverse;
	}
	public static Node reverseUsingTempNode(Node head){
		//将用三个临时变量指向最开始的三个节点
		Node p1 =head;
		Node p2 =head.next;
		Node p3 =head.next.next;
		//将头结点设置为null
		p1.next=null;
		//p1,p2,p3开始循环依次向后面移动。
		//每一次将p2所指向的节点反转后,3个变量就依次往后移动,直到p3==null
		while (p3!=null) {
			//扭转p2
			p2.next=p1;
			//p1向后移动
			p1 = p2;
			//p2向后移动
			p2 = p3;
			//p3向后移动
			p3 = p3.next;
		}
		//循环最后,p2节点指向最后一个节点,但还没有反转,所以最后还要反转一下
		p2.next=p1;
		//p2现在是头节点了
		return p2;
	}
	public static void main(String[] args) {
		//构造一个链表
		Node e =new Node(5, null);
		Node d =new Node(4, e);
		Node c =new Node(3, d);
		Node b =new Node(2, c);
		Node a =new Node(1, b);
		System.out.println(a);
		Node headAfterReverse = reverseByRecursion(a);
		System.out.println(headAfterReverse);
		Node headAfterReverseAgain = reverseUsingTempNode(headAfterReverse);
		System.out.println(headAfterReverseAgain);
	}
}


MFC工具栏增加EditBox和Button 1. 在资源视图中增加EditBox, Button控件,ID分别为ID_EDIT_SEED, ID_BTN_SEED 2. 在CMainFrame中增加成员变量 CMFCToolBarEditBoxButton *m_editSeed; CMFCToolBarButton *m_btnSeed; 3. 在CMainFrame::OnCreate中创建控件 m_editSeed = new CMFCToolBarEditBoxButton(ID_EDIT_SEED, GetCmdMgr()-&. 阅读详情

相关推荐

WPS Office 2026免费安装指南:AI办公与安全使用全解析

办公软件作为数字化办公的核心工具,其基本原理是通过文档处理、数据计算和演示展示等功能模块满足用户日常办公需求。随着人工智能技术的发展,现代办公软件逐步集成AI能力,通过自然语言处理和数据分析算法提升工作效率。在技术价值层面,优秀的办公软件不仅需要保持格式兼容性和跨平台同步能力,更要注重用户数据安全防护。从应用场景来看,无论是个人文档编辑、企业报表分析还是团队协作演示,办公软件都发挥着关键作用。WPS Office 2026作为国产办公软件代表,深度融合AI助手功能,支持智能写作和数据分析,同时通过官方免费策

weixin_30599769的博客 723

反转链表的Java实现

目录 1、迭代法 2、递归方式 反转链表: 输入:1->2->3->4->5 输出:5->4->3->2->1 1、迭代法 思路:遍历整个链表,当链表不为空时,每次取链表的第一个Node作为当前节点,修改当前Node的指针,重复此步骤,步骤解析如下: Java代码的具体实现步骤 public static ListNode reverseNode_1(ListNode node) { ListNode previ

swadian2008的博客 6797

41页PPT | 华为业务流程架构全景视图:全业务域L1-L3级流程全案

TBD、收集和生成线索、验证机会点、TBD、管理销售授权、管理销售项目、管理销售项目群、管理合同要素/模板、验证和分发线索、标前引导、管理开票和回款、客户网络评估、管理销售评审、TBD、管理交付项目群、管理合同文档、管理结构化合同信息、跟踪和培育线索、制定并提交标书、管理合同/PO变更、客户网络规划、管理销售决策。:4.1 管理技术、服务请求、4.2管理备件、服务交付、4.3管理非技术、服务请求、4.4管理客户、投诉。:管理Idea、产生Idea、激发兴趣与协作、孵化、原型和验证、确认Idea与商业化。

zuoan1993的博客 4550

Java - 反转链表

算法基础-反转链表

分数没二舅血压高 6318

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2075

同花顺自动化交易避坑指南:pywinauto实战中验证码识别与界面弹窗处理

本文深入探讨同花顺自动化交易中的关键稳定性问题,重点解决验证码识别与弹窗处理两大难题。通过优化Tesseract OCR、整合打码平台API以及设计pywinauto弹窗监控体系,提供了一套完整的自动化交易解决方案,帮助交易者有效规避资金账户和持仓信息操作中的常见陷阱。

weixin_33734785的博客 487

【算法练习】4种反转链表的方法(Java实现)

几种链表反转方法的主要区别在于迭代法和递归法是在原链表上直接反转,无需额外空间;而头插法和栈辅助需要 O(N) 的额外空间。一般迭代法代码最简洁,递归法需要处理终止条件,但思路清晰。

软件工程探索之旅 6715

从选卡到验证:CST仿真GPU加速全流程实战指南

本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。

weixin_30650039的博客 394

反转链表的java实现

一、问题描述 现在给你一个单链表的头节点 head ,请你反转链表,并返回反转后的链表 示意图: 单链表的定义: /** * 下面给出的是单链表的定义 * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) {

weixin_48016395的博客 6140

深度学习之基于Pytorch手指静脉识别系统(

一、项目背景与目标手指静脉识别技术是一种新兴的生物特征识别技术,它依据人类手指中流动的血液可吸收特定波长的光线这一科学原理,利用手指内的静脉分布图像来进行身份识别。与传统的生物识别技术(如指纹识别)相比,手指静脉识别技术具有不易伪造、识别精度高、非接触性等特点,因此在安全性要求较高的场景(如金融、医疗、公安等)具有广阔的应用前景。本项目旨在利用PyTorch深度学习框架,构建一套高效、准确的手指静脉识别系统。

Q1744828575的博客 832

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2542

Java 实现反转一个链表

如何用 Java 实现反转一个链表

超烦豆先森 3148

MFC实现简单UDP通信(附完整源码)

MFC实现简单UDP通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1109

jdk8 list 反转_数据结构-单链表反转的三种方式 - lichlaughing

单链表是一种线性数据结构,由当前节点数据和指向下个节点的指针组成,因为是单向的,所以称为单链表单链表的反转:例如:1—>2—>3—>4 反转成:4—>3—>2—>1首先定义一个链表的节点:public class Node { private int data; private Node next; public Node(i...

weixin_39872257的博客 371

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java 链表反转_LeetCode206 实现单链表的反转

LeetCode206 实现单链表的反转LeetCode 码,码不停题1.题目介绍Reverse a singly linked list.Example:Input:1->2->3->4->5->NULLOutput:5->4->3->2->1->NULL2.实现方式就地反转法新建链表,头节点插入法递归反转法3.代码实现不啰嗦,直接看代...

weixin_39958025的博客 165

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OJ题[编程题总结] -- 反转单链表

题目链接:https://leetcode-cn.com/problems/reverse-linked-list/description/ 题目描述: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 代码: public ListNode rever...

asdx1020的博客 322

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

牛客网刷题-单链表反转

package com.example.demo.subject1; /** * @version: 1.00.00 * @description: 单链表反转 * @author: z * @date 2021/4/13 16:52 */ public class ListInversion { public static void main(String[] args) { } /** * 1->2->3->4 * 1&l.

qq_40800584的博客 187

链表---Leetcode206. 反转链表

反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL class Solution{ public ListNode reverseList(ListNode head){ ListNode prev = null; while(head != null){ ListNode cur

ainstinct的博客 173

2019-09-16 反转链表

反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? C++ /** * Definition for singly-linked list. * struct ListNode { * ...

Antrn 309

LeetCode 206-Reverse Linked List

题目:Reverse a singly linked list. 分析:此题在于细节,处理链表长度为0、1、2长度的特殊情况 代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {

keitho00的专栏 501

Java 算法篇-深入了解单链表的反转(实现:用 5 种方式来具体实现)

单链表的反转是指将链表中的节点顺序逆转,即原先的链表尾部变成了头部,头部变成了尾部。比如,[1,2,3,4,5,6,7] 将这个链表的值反转得到的结果为:[7,6,5,4,3,2,1],需要注意的是,可以用值打印出来会更好观察链表反转后的结果。 具体的创建思路:首先要把节点进行封装成单独的类,该类中的成员包括:int value 存放值,Node next 引用下一个节点。由于该节点类为链表中的一个组成部分,因此,将该类设为静态内部类,外部类的成员为哨兵节点。

小扳手 7669

Java单链表反转 详细过程

https://blog.youkuaiyun.com/guyuealian/article/details/51119499 (一)单链表的结点结构:       data域:存储数据元素信息的域称为数据域;     next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置)的指针域(链域)。    dat...

qq_32534441的博客 2万+

java实现单链表的反转

/单链表结点的数据域//单链表结点的指针域。

chenlang02的博客 1421

java中如何实现单链表反转

1.准备链表准备一个由DataNode组成的单向链表,DataNode如下:csharp 代码解读复制代码构造链表ini 代码解读复制代码public class DataChain {运行main方法,即构造了一个包含10个node节点的单链表。rust 代码解读复制代码#运行结果2.通过递归实现单链表反转考虑到代码的简洁性,首先考虑的是通过递归实现。java 代码解读复制代码 /**

pantouyuchiyu的博客 1309

数据结构之Java单链表反转

本文为数据结构基础,研究得不是很深。用Java实现单链表的反转,虽然本文研究得不是很深,但是因为是数据结构,所以必须是在对Java内存比较清楚的情况下才能真正的搞懂吃透,如果对Java内存不够清楚,那最多只能学形而不能学其内在。          首先我们要搞清楚链表是啥玩意儿?先看看定义:          讲链表之前我们先说说Java内存的分配情况:我们new对象的时候,会在java堆中为

风哲的博客 1万+

【数据结构与算法】之单链表反转

单链表反转是一个重要的算法,理解其原理并能够熟练地编写代码至关重要。本文提供的代码清晰易懂,希望能够帮助读者更好地理解和掌握这个算法。 通过使用prev、curr和next三个指针,我们可以优雅地实现链表的反转。记住关键步骤:保存下一个节点、反转当前节点指向、更新指针。 熟练掌握这个技巧,可以帮助你解决更多更复杂的链表问题。

weixin_64178283的博客 1959
上一篇: Spring Annotation 备忘
下一篇: 检查链表是否有环
大飞Tobi
博客等级 码龄16年 54粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值