java查找链表中间元素_如何通过Java单次查找链表的中间元素

java查找链表中间元素

您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员。 这个问题类似于检查回文或
计算阶乘 ,有时Interviewer还会要求编写代码。 为了回答这个问题,候选人必须熟悉LinkedList的数据结构,即在单个LinkedList的情况下,Linked List的每个节点都包含数据和指针,这是下一个Linked List的地址,并且Singly Linked List的最后一个元素指向空值。 因为要找到链表的中间元素,您需要找到链表的长度,即计算元素的长度直到结束,即直到找到链表的最后一个元素。
是什么使得这个数据结构面试问题有趣,是您需要找到inkedList的中间元素 一口气 ,您不知道LinkedList的长度。

无论是否熟悉时空权衡等,这都是考生逻辑能力的考验。

就像您仔细考虑过一样,您可以使用两个指针来解决此问题,如我上一篇有关如何在Java中查找单链接列表的长度的文章中所述 。

通过使用两个指针,在每次迭代中增加一个指针,并在每第二次迭代中增加另一个指针。 当第一个指针指向链接列表的末尾时,第二个指针将指向链接列表的中间节点。

实际上,这种两指针方法可以解决多个类似的问题,例如
如何在一个迭代中从链表中的最后一个查找第三个节点,或如何从链表中的末个查找第N个元素。 在本Java编程教程中,我们将看到一个Java程序,该Java程序在一个迭代中找到“链表”的中间元素。

如何通过一遍查找LinkedList的中间元素

这是一个完整的Java程序,用于查找Java中“链表”的中间节点。 请记住,这里的LinkedList类是我们的自定义类,不要将该类与java.util.LinkedList混淆,该类是Java中流行的Collection类。

在此Java程序中,我们的类LinkedList表示一个链表数据结构,该结构包含节点的集合并具有头和尾。

每个节点包含数据和地址部分。 主要方法
LinkedListTest类用于模拟问题,我们在其中创建了链表,并在链表上添加了一些元素,然后对其进行迭代以在Java中通过一次查找链表的中间元素。

import test.LinkedList.Node;/*** Java program to find middle element of linked list in one pass.* In order to find middle element of a linked list * we need to find the length first but since we can only * traverse linked list one time, we will have to use two pointers* one which we will increment on each iteration while * other which will be incremented every second iteration.* So when the first pointer will point to the end of a * linked list, second will be pointing to the middle * element of a linked list** @author Javin Paul*/
public class LinkedListTest {public static void main(String args[]) {//creating LinkedList with 5 elements including headLinkedList linkedList = new LinkedList();LinkedList.Node head = linkedList.head();linkedList.add( new LinkedList.Node("1"));linkedList.add( new LinkedList.Node("2"));linkedList.add( new LinkedList.Node("3"));linkedList.add( new LinkedList.Node("4"));//finding middle element of LinkedList in single passLinkedList.Node current = head;int length = 0;LinkedList.Node middle = head;while(current.next() != null){length++;if(length%2 ==0){middle = middle.next();}current = current.next();}if(length%2 == 1){middle = middle.next();}System.out.println("length of LinkedList: " + length);System.out.println("middle element of LinkedList : "                                  + middle);} }class LinkedList{private Node head;private Node tail;public LinkedList(){this.head = new Node("head");tail = head;}public Node head(){return head;}public void add(Node node){tail.next = node;tail = node;}public static class Node{private Node next;private String data;public Node(String data){this.data = data;}public String data() {return data;}public void setData(String data) {this.data = data;}public Node next() {return next;}public void setNext(Node next) {this.next = next;}public String toString(){return this.data;}}
}Output:
length of LinkedList: 4
middle element of LinkedList: 2

一站式介绍如何查找LinkedList的中间元素。 正如我所说的,这是一个很好的面试问题,可以将程序员与非程序员分开。 此外,此处提到的用于查找LinkedList中间节点的技术可用于从Last或
LinkedList中最后一个元素的第n个元素。

如果您喜欢这篇文章,并想尝试一些更具挑战性的编程练习,那么请看以下来自各种访谈的编程问题:

  • 如何检查LinkedList是否包含Java中的任何循环? ( 解决方案 )
  • 如何在Java中搜索数组中的元素? ( 解决方案 )
  • 如何使用冒泡排序算法对数组进行排序? ( 算法 )
  • 如何在Java中计算数字的总和? ( 解决方案 )
  • 编写程序来查找Java中String中的第一个非重复字符? ( 程序 )
  • 如何检查数字在Java中是否为二进制? ( 回答 )
  • 编写程序以检查数字是否为素数? ( 解决方案 )
  • 如何防止Java死锁? ( 解决方案 )
  • 如何在Java中找到数字的最大素数? ( 解决方案 )
  • 如何在Java中使用递归计算阶乘? ( 算法 )
  • 如何在Java中声明和初始化二维数组? ( 解决方案 )
  • 编写一种方法来计算字符串中字符的出现次数? ( 解决方案 )
  • 如何检查号码是否是阿姆斯特朗号码? ( 解决方案 )
  • 编写一个程序,而不使用Collection API从数组中删除重复项? ( 程序 )
  • 如何在不使用API​​方法的情况下反转Java中的String? ( 解决方案 )
  • 写一个方法来从Java中的ArrayList中删除重复项? ( 解决方案 )
  • 编写程序以检查数字是否为回文? ( 程序 )
  • 编写程序以检查数组是否包含重复的数字? ( 解决方案 )
  • 如何找到不超过给定数字的斐波那契数列? ( 解决方案 )
  • 编写程序以查找排序数组中的缺失数字? ( 算法 )
  • 关于Java数组有10点? ( 必须知道事实 )
  • 如何在Java中找到整数数组的前两个最大值? ( 解决方案 )
  • 编写一种方法来检查两个String是否是彼此的Anagram? ( 方法 )
  • 如何找到数组中最大和最小的数字? ( 解决方案 )
  • 编写函数一次找到链接列表的中间元素? ( 解决方案 )
  • 如何解决Java中的生产者-消费者问题。 ( 解决方案 )
  • 编写程序以检查数字是否为2的幂? ( 程序 )

到目前为止,感谢您阅读此编码面试问题。 如果您喜欢这个String面试问题,请与您的朋友和同事分享。 如果您有任何问题或反馈,请发表评论。

翻译自: https://www.javacodegeeks.com/2019/03/middle-element-linked-list-java-single-pass.html

java查找链表中间元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...

在 PHP 中,想要获取由 SELECT 语句查询到的结果集中有多少条数据的话,则需要使用 mysqli_num_rows() 函数来实现。首先我们来看一下该函数的语法结构:面向对象风格的写法$mysqli_result -> num_rows;其中 $mysqli_result 为使用 mysqli_qu…

Windows系统下,好用的录屏软件工具/屏幕录制工具

文章目录万兴神剪手Open Broadcaster Software(OBS)QQ录屏Window 10 自带的屏幕录制软件录屏王bandicam万兴神剪手 可以录制网络视频、视频教程、游戏指南、演示文稿等。除了一些需要调用显卡的游戏,游戏窗口画面都能录制。神剪手的后期剪辑…

What are definitions of ​Model, Inference and Algorithm and its associations ?

【1】拿初中的二元一次方程来说明: 1.1)说model就好比一元二次方程,它是个方程模型;1.2)再说inference是求解该方程的某种方法——加减消元法(重在推理);1.3)最后说algo…

aws ec2 选择可用区_AWS Messaging Services:选择合适的服务

aws ec2 选择可用区1. AWS消息服务 AWS Messaging服务使云中相似和不同的软件系统能够异步通信和交换信息。 这些软件系统可能不兼容且使用不同的语言,也可能在不同的平台上。 AWS消息传递服务具有高度可用性,高度可扩展性和高度可靠性。 AWS支持针对不同…

qq消息连发代码_我们用的QQ是怎样实现通讯的

聊天工具便利了我们的生活,我们经常使用的QQ怎样实现通讯的呢?首先我们需要知道网络里的两种协议,两种通讯协议分别为UDP和TCP通常网络之间的通讯都是由这两个协议支持的,这两种协议属于传输层,它可以传输文件。UDP&am…

产品经理十大悲催错误

文章目录错误1: 将用户需求混淆为产品需求错误2: 将老板的需求混淆为产品需求错误3:将发明(invention)混淆为创造(innovation)错误4: 以自己的需求取代用户的需求错误5: …

cognito_将Spring Boot应用程序与Amazon Cognito集成

cognito在本文中,我们将展示如何使用Spring Security 5.0中引入的OAuth 2.0客户端库 ,在Spring Boot应用程序中为身份验证用户使用Amazon Cognito服务。 什么是AWS Cognito? Amazon Cognito是由AWS提供的服务,除了提供支持访问AW…

how to build a paper's architecture?

【0】README 0.1) these contents below are from PhD Hongjun Wang on ML class in #9133. best regards! 0.2) these contents below are just for reference. 【1】related to build a paper’s architecture 1.1) problem? what’s…

python之路 mysql 博客园_Python之路(二十七):Mysql(下)

本结目录数据库操作数据表操作外键约束多表查询索引事务python连接Mysql数据库操作此操作针对windows环境下该操作再Mysql服务器启动以及客户端连接之后对数据库操作之前,引申一些较为听的懂的白话1、显示数据库show databases; --后面记得跟英文字符的分号show cre…

APP视觉稿该怎么切图和标注

本篇教程跟大家分享UI设计的一些知识,就是APP怎么切图和标注,还不懂的同学,赶紧了解一下。 首先:哪些东西要切出来? 简单来说就是代码不好实现的东西就直接切成一张图放到软件里面展示,例如图片&#xff…

skynet.fork_Apache Ant 1.10.6发布–用于junitlauncher的fork模式以及新的jmod和链接任务

skynet.forkApache Ant 1.10.6已于本周发布。 此版本包含许多错误修复以及一些非常令人兴奋的新功能。 完整的发行说明可在此处获得 ,下载本身也可以在此处获得 。 在本文中,我将介绍该版本中引入的一些新功能。 使用junitlauncher任务在派生的JVM中运行…

使用MRUnit,Mockito和PowerMock进行Hadoop MapReduce作业的单元测试

0、preliminary 环境搭建 Setup development environment Download the latest version of MRUnit jar from Apache website: https://repository.apache.org/content/repositories/releases/org/apache/mrunit/mrunit/. For example if you are using the Hadoop version 1.…

python奇偶求和_python 判断奇偶并求和,运行过程有错误,希望高手给指导一下。...

问题是:b) Add to the condition in the while loop so that it will stop if either the user inputs a zero or the sum is larger than limit (if limit is None then ignore the second stopping condition). Do not use a break statement to implement this f…

产品经理如何进行需求管理?

文章目录交付需求第一步:提交需求1、流程图2、结构图3、原型图4、产品需求文档第二步:需求评审制定需求实施计划1、和研发确定开发计划2、和设计人员确定UI设计计划3、和运营人员确定运营计划管控需求变更1、分析需求2、分析变更的可行性3、 变更需求需求…

sap wad_使用网真和WAD热部署Kubernetes

sap wad在Kubernetes环境中测试企业应用程序时,更改,重新打包和重新部署应用程序的周转率可能会很高。 网真旨在通过将本地运行的进程代理到我们的Kubernetes集群中来缓解这种情况,就像本地进程是集群的一部分一样。 如果我们将这种方法与诸如…

关于产品的核心问题

文章目录交互设计产品方向产品定位产品使命产品愿景产品逻辑用户价值用户体验产品价值什么样的产品才是合格的?什么样的产品才是优秀的?产品经理关注的核心点做产品前产品经理必须明确三个问题交互设计 定义和设计系统的行为就是交互设计,说…

正则表达式总结之查找

【0】、写在前面 以下内容总结于shell脚本学习指南 【1】我们说查找文本要用到三种文本匹配程序 : 1.1)grep 使用的是基本正则表达式(basic regular expression,BRE) 1.2)扩展式grep 使用 egrep&#xf…

java hipster!_通过Java Hipster升级Spring Security OAuth和JUnit测试

java hipster!“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 使用单元测试和集成测试来验证代码质量是一种很好的方式来表明您对代码…

在 Mac 上显示或隐藏文件扩展名

文章目录对于一个文件对于所有文件通过命令来设置更改扩展名显示警告对于一个文件 在 Mac 上,选择文件,然后选取“文件”>“显示简介”,或按下 Command-I。 点按“名称与扩展名”旁边的三角形来展开下面的部分。 若要显示或隐藏文件扩展…

dism++封装系统使用教程_客栈管理系统“订单来了”客房订单盒子使用教程

原标题:客栈管理系统“订单来了”客房订单盒子使用教程「订单来了」是非标住宿行业领先的移动互联云PMS,是以PMS为基础,聚合全渠道的营销管理生态平台,为客栈/民宿提供信息化一体解决方案。已累计服务国内外400城市、30000商家&am…