Java学习手册:(数据结构与算法-链表)如何寻找单链表的中间结点元素?

数据结构 链表 查找倒数第N个节点的值 查找中间节点的值 初始化并建立单链表 遍历链表数据 查找倒数第N个数据 查找中间数据 立即下载

算法思想:在单链表中设置两个指针的方式来实现中间结点的快速查找。具体步骤为:1、两个指针同时从头开始遍历;2、一个快指针一次走两步,一个慢指针一次走一步;3、快指针先到达链表尾部,而慢指针则恰好到达链表中部(当链表长度为奇数时,慢指针指向的就是链表中间的结点,当链表长度为偶数时,慢指针指向的结点和该结点的下一个结点都是链表中间结点 )。

/*
 * 如何寻找单链表的中间结点
 */
//定义结点类,存储结点信息
class Node{
	Node next = null;
	int data;
	public Node(int data) {
		this.data = data;
	}
}

public class LinkedList {
	
	Node head = null;//链表头的引用
	
	/**
	 * 向链表尾部插入数据
	 * @param d
	 */
	public void addNode(int d) {
		Node newNode = new Node(d);
		if(head == null) {//如果链表为空
			head = newNode;
			return;
		}
		Node temp = head;//如果链表不为空,指定temp指向链表头结点
		while(temp.next != null) {//遍历链表到末尾,直到temp指向尾结点
			temp = temp.next;
		}
		temp.next = newNode;//在尾部插入结点
	}
	
	/**
	 * 输出当前链表的数据
	 */
	public void printList() {
		Node temp = head;
		while(temp != null) {
			System.out.println(temp.data);
			temp = temp.next;
		}
	}
	
	/**
	 * 寻找中间结点
	 * @param head//传入参数为链表的头结点
	 * @return
	 */
	public Node searchMid(Node head) {
		Node fast = this.head;
		Node slow = this.head;
		while(fast != null && fast.next != null && fast.next.next != null) {//判断快指针、快指针下一个结点、快指针下两个结点是否为空
			fast = fast.next.next;//快指针一次走两步
			slow = slow.next;//慢指针一次走一步
		}
		if(fast.next == null) {//快指针刚好到达链表末尾,说明链表长度为奇数
			System.out.println("链表中间结点为:"+slow.data);			
		}else {//否则,链表的长度为偶数,快指针未到达链表末尾
			System.out.println("链表中间结点为:"+slow.data+"和"+slow.next.data);
		}
		return slow;
	}
	
	public static void main(String[] args) {
		LinkedList list = new LinkedList();
		list.addNode(1);
		list.addNode(2);
		list.addNode(3);
		list.addNode(4);
		list.addNode(5);
		list.addNode(6);
		System.out.println("链表序列为:");
		list.printList();
		list.searchMid(list.head);
		
	}
	
}

程序输出结果如下:

链表序列为:
1
2
3
4
5
6
链表中间结点为:3和4
 

滑模控制概述 滑模控制概述1.滑模控制概念2.滑模控制原理3.滑模控制设计步骤4.研究现状5.发展趋势5.1自适应滑模变结构控制5.2模糊滑模控制5.3神经网络与滑模控制的结合 1.滑模控制概念   滑模控制(Sliding Mode Control,SMC)是一种特殊类型的变结构控制(Variable Structure Control,VSC),因此又称之为滑模变结构控制,是近年来广泛应用和发展的一种控制方法。滑模控制本质上是一种非线性控制,即控制结构随时间变化而变化。滑模变结构控制是非线性系统中普遍采用的一种分析方 阅读详情

相关推荐

深入解析Zynq Ultrascale+ RF Data Converter中的PLL配置与时钟管理

本文深入解析了Zynq Ultrascale+ RF Data Converter中PLL配置与时钟管理的核心原理与实践。文章将RFDC时钟系统比作交响乐团,详细阐述了PLL作为指挥的关键作用,以及系统时钟、Tile时钟、参考时钟与采样时钟的层级关系。重点剖析了PLL配置参数(如VCO频率、分频器设置)的计算方法与稳定性考量,并提供了从IP配置使能顺序到多Tile同步、DRP访问等常见问题的实战避坑指南与调试技巧,帮助工程师构建稳定的射频信号处理基石。

7up55的博客 450

你真的会找链表“中点”么?

不难看出,当链表为空,或仅有 1 个或 2 个结点时,中间结点均为头指针 head 所指向的结点。当链表为空,或仅有 1 个结点时,中间结点均为头指针 head 所指向的结点。当链表为空,或仅有 1 个或 2 个结点时,中点前一个均为头指针 head。的思想进行解答,即慢指针 slow 走一步,快指针 fast 走两步。当链表仅有 2 个结点时,下中点前一个是第一个结点,即 head。当链表为空,或仅有 1 个结点时,下中点前一个均为 null。

weixin_46879314的博客 703

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面

本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。

weixin_28358083的博客 199

JAVA实现快速查找一个单链表的中间位置

最近面试被问到的一个场景问题:如何快速查找到一个单链表的中间位置? package com.pers.guofucheng.demo; import java.util.LinkedList; import java.util.List; /** * 题目:如何快速查找到一个单链表的中间位置? * 快慢指针首先指向第一个节点,快指针每次走2个结点,慢指针每次走1个结点,当快指针走完链表,慢指针刚好走到中间。 * 当前快指针走完链表时,慢指针刚好走到 中间结点。 * 实际上当结点数是奇数时 慢指针

Guofucheng0720的博客 708

高数15种常见特殊曲线:星形线、心形线、摆线、对数螺线、双曲螺线、阿基米德螺线、伯努利双纽线、三叶玫瑰线、四叶玫瑰线、六叶玫瑰线、三次抛物线、半立方抛物线、箕舌线、蔓叶线、笛卡儿叶形线、概率曲线

4.1 对数螺线(等角螺线、生长螺线)三叶玫瑰线、四叶玫瑰线、六叶玫瑰线。​7.2 半立方抛物线(尼尔曲线)10.笛卡儿叶形线(茉莉花瓣曲线)常考选择题、填空题,大题也涉及。​4.2 双曲螺线(倒数螺线)11.阿基米德螺线(等速螺线)3.摆线(圆滚线、旋轮线)5.双纽线(伯努利双纽线)1.星形线(四尖瓣线)2.心形线(心脏线)..................

刘鑫磊 1万+

redhawk:使用rh_setup.pl产生gsr模板

必须加的option工具会在rh_setup.pl给出提示,按照要求填写即可,另外工具会把所有填写的输入文件和信息放到rh_setup.init文件中,拷贝这个文件可在任何平级运行目录下,直接rh_setup.pl产生gsr以及run sta/dyn/em的脚本。rhsetup.pl -top top_cell_name -vdd_nets VDD 1.2 VDD2 1.2 -vss_nets VSS -frequency 100e6 (100m是默认值)更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 1055

取得单链表中间元素

配套的单链表在另一篇博客。 和上一篇快慢指针原理基本相同。 核心问题就是下面的那个While判断条件,和最下面的奇数链表和偶数链表的问题。 然后是判断单链表的元素个数是奇数还是偶数的问题,观察我下面画的表。当元素个数为奇数的时候,First停止时,Second位置正好就是中间的位置,问题是元素个数为偶数的时候,First停止时,中间有两个位置,我选择的返回的是第二个位置。 ...

万事屋银ちやん 415

从SOMEIP看SOA,汽车电子电器架构的转变

从SOMEIP看SOA,汽车电子电器架构的转变

天赐好车的博客 242

寻找单链表的中间元素

寻找单链表的中间元素 单链表元素个数如果为奇数个则正常输出中间元素即可,若单链表元素个数为偶数个则将两个中间元素都输出。 代码如下: #include<stdio.h> #include <malloc.h> #include<stdbool.h>//C语言中要用bool类型时 需要用此文件名,若没有此文件 就无法使用bool typedef int Elem...

Change_Improve的博客 1441

Python学习第1天:初识Python

Python 作为目前最流行的编程语言之一,凭借其简洁优雅的语法和强大的生态系统,成为了无数开发者的首选。本系列文章将带你从零基础入门,逐步掌握 Python 编程的核心技能。今天我们先来认识 Python,并安装好开发环境。Python(英式发音:/ˈpaɪθən/;美式发音:/ˈpaɪθɑːn/)是由荷兰人吉多·范罗苏姆(Guido von Rossum)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户的编程语言。

tigerhhzz的博客 434

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4085

尾插法建立单链表之后找输出单链表中间节点的元素值

#include<iostream> using namespace std; typedef struct lnode{ //单链表的节点定义 int data; struct lnode*next; }lnode; void creatlistr(lnode *&c,int a[],int n){ //尾插法建立单链表的函数 lnode *r,*s; int i; c=ne...

m0_47575628的博客 410

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

Java学习手册:数据结构与算法汇总

数据结构与算法程序题汇总如下:(不断更新中) 1、PAT(Basic Level)Practise-----1001 2、Java学习手册:(数据结构与算法-链表)如何实现单链表的增删操作? 3、Java学习手册:(数据结构与算法-链表)如何实现单链表排序? 4、Java学习手册:(数据结构与算法-链表)如何从链表中删除重复元素? 5、Java学习手册:(数据结构与算法-链表)如何找出单链表中的倒...

浩比的专栏 3248

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《单链表学习手册:从原理到代码实现(含头插 / 尾插 / 销毁)》

本文系统介绍了单链表的核心概念与基本操作。单链表是一种通过指针连接节点的线性数据结构,具有离散存储、动态扩容等特点。主要内容包括:1.单链表的结构组成(节点定义、带头节点设计);2.基本操作实现(打印、头插尾插、头删尾删);3.进阶操作(查找节点、指定位置插入/删除);4.链表销毁方法。每种操作都提供了清晰的实现思路和C语言代码示例,特别强调了边界条件处理和指针操作顺序。本文可作为学习单链表基础操作的实用指南,为后续学习更复杂数据结构奠定基础。

2403_87212593的博客 1869

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构与算法——单向链表

当涉及到数据结构时,单链表是一种常见且重要的数据结构。它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单链表具有动态性和灵活性,可以高效地插入和删除节点。在这篇博客中,我们将深入探讨单链表的原理、操作和常见应用。我们将讨论如何创建和遍历链表,如何在链表中插入和删除节点,以及如何解决一些常见的问题。通过理解单链表的工作原理和应用,我们可以更好地应用它来解决实际问题。

Benmao的博客 1003

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java学习手册:(数据结构与算法-链表)如何找出单链表中的倒数第K个元素?

算法思想:由于单链表只能从头到尾依次访问链表的各个结点,因此,如果要找出链表的倒数第K个元素的话,也只能从头到尾进行遍历查找,在查找过程中,设置两个指针,让其中一个指针比另一个指针先后移K-1步,然后两个指针同时往后移动。循环直到先行的指针值为NULL时,另一个指针所指的位置就是所要找的位置。 以下代码实现了在单链表中找出倒数第K个元素。 /* * 如何找出单链表中的倒数第K个元素 */...

浩比的专栏 289

Java学习手册:(数据结构与算法-链表)如何从尾到头输出单链表?

算法思想: ①把链表结点的指针反转过来,改变链表的方向,然后就可以从尾到头输出单链表了,详见。 ②采用递归的思想,要实现链表的逆序输出,每访问到一个结点,先递归输出它后面的结点,再输出该结点自身,这样链表的输出结果就反过来了。代码如下: /* * 如何从尾到头输出单链表 */ //定义结点类,存储结点信息 class Node{ Node next = null; int data...

浩比的专栏 381

Java学习手册:(数据结构与算法-链表)如何实现单链表排序?

以下代码通过插入排序实现了对链表的排序。 /* * 如何实现单链表的排序? */ //定义结点类存储结点信息 class Node{ Node next = null; int data; public Node(int data) { this.data = data; } } public class LinkedList { Node head = null;/...

浩比的专栏 330

数据结构与算法(三)—— 线性表、顺序表和链表

注:本篇内容参考了《Java常用算法手册》、《大话数据结构》和《算法导论》书籍。 本人水平有限,文中如有错误或其它不妥之处,欢迎大家指正! 目录 1.线性表概念 2线性表的存储结构 2.1线性表的顺序存储结构 2.1.1 定义 2.1.2 数组长度与线性表的度度 2.1.3 地址计算方法 2.1.4 操作 2.1.5 Java实现 2.1.5 优缺点 2.2线...

小羽毛的博客 2254

Java学习手册:(数据结构与算法-链表)如何实现单链表的增删操作?

以下代码实现链表的最基本操作,包括给链表增加结点(每次都在链表尾部增加新结点)和删除链表中的结点。 /** * 如何实现单链表的增加、删除操作? */ //定义结点类存储结点信息 class Node{ Node next = null; int data; public Node(int data) { this.data = data; } } public class...

浩比的专栏 298

面试大厂被吊打?别灰心,面试季必备的数据结构与算法学习指南来了!

数据结构与算法的重要性 前几天和朋友聊面试,大家都比较想知道,到底怎么才能进大厂,在说这个问题之前呢,我想给大家分享一个小故事。 我有个 Facebook 的朋友,他当年同时拿到了 Google 和 FB 的 offer,最后选择了 FB,我了解了下他的面试过程,就一点,无论管是 Google 还是 FB 的面试,其中一个占比非常大的权重就是数据结构与算法。 不管你面试什么岗位,前端安卓也好,后端也罢,都必须考察算法,这关过了,基本上就没太大问题了。他告诉我,那些大厂认为,你能把最基本、最核心的算..

嘴巴吃糖了 886

java单链表节点翻转_如何在Java中反转单链表?

在本文中,我将向您展示如何在没有递归的情况下在Java中反转单个链表。单链表,也称为链表,是一组节点,只能在一个方向上遍历,例如向前。链表中的每个节点都包含两个内容,一个数据和指向列表中下一个节点的指针。为了反转链表,我们需要遍历列表,在每一步我们都需要反转链接,例如在第一次迭代之后,head将指向null,而next元素将指向head。在到达链表尾部时遍历结束时,尾部将指向第二个最后一个元素,它...

weixin_29024675的博客 263

字节内部进阶手册:算法与数据结构突击手册(leetcode)

算法能力是每一个程序员的基本功,只懂模型不懂算法,注定只是一个“绣花枕头”,而非真正的工程师。 众所周知,程序员求职面试必考算法,题刷得好,拿Offer更有优势。但是,没有坚实的算法知识体系储备,没有长期持之以恒算法题目训练,很难脱颖而出。 所以,为有需要的朋友们送上一套【算法与数据结构突击手册】的福利。按照算法知识体系,精心筛选leetcode、HDU等平台1000+经典题目。帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取 话不多说直接上文档...

weixin_50666791的博客 320

Java算法手册读书笔记 05.数据结构之链表结构

01.什么是链表结构? 链表结构是一种动态存储分配的结构形式,可以根据需要动态申请所需的内存单元。 典型的链表结构中每个结点都应该包括如下内容: 1.数据部分,保存的是该结点的真实数据 2.地址部分,保存的是下一个结点的地址 链表结构就是由许多这种结点构成的,在进行链表操作时,首先需要定义一个"头引用"变量,一般以head表示,该引用变量指向链表结构的第一个结点,第一个结点的地址部分...

GET知识不迷路,点赞评论加关注! 482

java链表_java数据结构与算法之顺序表与链表深入分析(二)

点击上方“Java专栏”,选择“置顶或者星标”第一时间阅读精彩文章!1、☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜2、☞《Java面试手册》.PDF 点击查看带头结点的单链表以及循环单链表的实现带头结点的单链表上一章分析的单链表是不带特殊头结点的,所谓的特殊头结点就是一个没有值的结点即://没有带值的头结点Node<T> head= new Node...

weixin_39867125的博客 117
上一篇: Java学习手册:(数据结构与算法-链表)如何从尾到头输出单链表?
下一篇: Java学习手册:(数据结构与算法-链表)如何在不知道头指针的情况下删除指定结点?
浩比浩比
博客等级 码龄12年 395粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值