如何通过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

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

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

相关文章

工业POE交换机使用中的常见问题汇总

我们在使用工业POE交换机的过程中,不可避免的会遇到一些问题,我们只有对这些问题有了详细的了解认识之后,才能更好的使用操作工业交换机,在这里,杭州飞畅科技的小编为此专门为大家整理了在使用工业POE交换机过程中的一…

什么是管理型工业以太网交换机?

众所周知,以太网连接设备发展的下一代产品是管理型交换机,相对于集线器和非管理型交换机,管理型交换机拥有更多更复杂的功能,价格也高出许多-通常是一台非管理型交换机的3~4倍。管理型交换机提供了更多的功…

使用Hibernate和Spring构建Java Web应用程序

这篇文章将展示如何在Spring环境中使用带有Hibernate ORM的MYSQL DB创建学生注册应用程序。 这是一个简单的应用程序,旨在在注册过程中从用户收集输入详细信息,将这些详细信息保存在MYSQL DB中,并在登录期间对其进行身份验证。 1.使用Maven模…

光纤交换机常见硬件、软件故障问题介绍

现如今,交换机已经普及到了各办公场所,商场,学校,医院等等几乎所有的需求上网的地方,各大光纤交换机厂商也加大了研发速度,使得现今的设备在性能上更加优越,价格更加合理,也促使了交…

将Amazon Cognito与单页面应用程序(Vue.js)集成

在本文中,我们将研究使用OAuth协议通过Amazon Cognito对单页应用程序(使用Vue.js构建)进行身份验证。 在上一篇文章中,我们将服务器端应用程序与Amazon Cognito集成在一起。 搭建单页应用程序 我们将使用vue-cli创建一个空的Vuej…

光纤交换机使用方法及应用方案详解

光纤交换机是一种高速的网络传输中继设备,又叫做光纤通道交换机、SAN交换机,它较普通交换机而言,采用了光纤电缆作为传输介质,光纤传输的优点是速度快、抗干扰能力强。那么,光纤交换机该如何使用呢?接下来我…

在监控网络项目中该如何选择光纤交换机?

现在,随着网络技术的发展,在安防监控项目中,尤其是在远距离点位的监控中,我们经常会用到光纤收发器、光纤交换机。那么,我们在监控网络中该如何选择光纤交换机呢?接下来就跟随飞畅科技的小编一起来详细看看…

2019年用于自动化的5个最佳Java测试框架

几十年来,Java一直是开发应用程序服务器端层的首选编程语言。 尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但是随着时间的推移和测试的发展,当自动化测试不断增长时,已经开发了许多基于Java的开源框架&#xff0…

光纤交换机主要分为哪几类?

光纤交换机是一种高速的网络传输中继设备,又叫做光纤通道交换机、SAN交换机,它较普通交换机而言,采用了光纤电缆作为传输介质。光纤传输的优点是速度快、抗干扰能力强。光纤交换机主要有两种,一是用来连接存储的FC交换机。另一种是…

运算放大器的基本电路符号

今天给大家介绍几种运放应用相关的电路。 这是运放的最基本的电路符号(1) 物联网应用一:放大器 1.反相放大器电路图(2) 2.同相放大器(3) 3.电压跟随器(4) 4.差分放…

工业交换机厂家有哪些,国产工业交换机品牌排行榜

近些年来,交换机在国内的应用很是广泛,但是工业交换机市场竞争异常激烈,光是国内光就应用很多专业生产研发交换机的厂家,在与国外交换机品牌的竞争中,国内的交换机品牌是越来越有本土的优势。那么,2021年国…

spring 异常捕获异常_使用Spring跟踪异常–第2部分–委托模式

spring 异常捕获异常在上一个博客中 ,我开始谈论需要弄清您的应用程序在生产环境中是否行为异常。 我说过,监视应用程序的一种方法是检查其日志文件是否存在异常,如果发现异常,则采取适当的措施。 显然,日志文件可能会…

LoRa在智能家居当中的物联网应用

一、智能家居行业背景 原文地址:LoRa在智能家居当中的应用 2020年,中国智能家居进入AIoT赋能期,全面革新智能家居产品形态。从市场规模来看,2019年智能家居市场规模达到1530亿元左右,2020年将达1820亿元。从设备出货量…

飞畅科技-国内老牌工业以太网交换机品牌

现如今,随着中国制造2025和工业4.0的逐渐展开,工业交换机的市场越来越大,尤其是在电力,交通,及工业自动化行业,但是进口品牌的在国内的份额却在不断的萎缩,这就给国内的很多工业交换机厂家一个非…

物联网是什么?物联网的关键技术是什么?

物联网是从应用出发,利用互联网、无线通信网络资源进行业务信息的传送,是互联网、移动通信网应用的延伸,是自动化控制、遥控遥测及信息应用技术的综合体现。 信息革命浪潮。物联网已经在全世界得到了很大的重视,随着“物联网十二五…

通过Java Hipster升级Spring Security OAuth和JUnit测试

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

核心交换机与汇聚交换机的区别

核心交换机并不是交换机的一种类型,放在核心层(网络主干部分)的交换机叫核心交换机。汇聚层交换机,是多台接入层交换机的汇聚地点。汇聚层交换机和核心交换机在功能、特性、参数、场景等都是有所区别。接下来我们就详细介绍下核心交换机、汇聚交换机、普…

TCP服务器虚拟串口工具的MCGS开发调试教程

TCP服务器虚拟串口(Modbus RTU) 虚拟串口的方式不同,虚拟从机的连接方式也就不同,利用虚拟串口的TCP服务器模式虚拟串口1(COM1)如下: MCGS配置不用修改,只需配置仿真从机&#xff0…

虚拟串口工具MCGS开发调试的灵活应用教程

MCGS开发调试一般来说具有三种方式,如下所述: (1)选择使用模拟设备,一般来说无法直接在电脑上调试真实设备(不带以太网型号),需要通过USB转485设备中转实现,在调试完成需…

工业级环网交换机是做什么的?

什么是环网交换机: 环网交换机是一种特殊的交换机,因为主流的环网交换机均为工业交换机,因此一般可以将其称为工业级环网交换机,环网交换在环网结构上有很多的优点,比如有冗余性、可靠性等。 环网交换机可以组建环形网…