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查找链表中间元素

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

  1. java 查找链表中间元素_如何在Java中一次性查找Java中链表的中间元素

    如何在一次传递中找到LinkedList的中间元素?这是一个 Java 和非Java程序员面试时经常被问到的编程问题.这个问题类似于检查回文或计算阶乘,有时也会要求编写代码.为了回答这个问题,候选人必 ...

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

    java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...

  3. java 增 删 查 改_如何对java链表进行增、删、查、改操作

    如何对java链表进行增.删.查.改操作 发布时间:2020-06-23 10:41:33 来源:亿速云 阅读:79 作者:Leah 如何对java链表进行增.删.查.改操作?针对这个问题,今天小编总 ...

  4. pta数据结构实验在数组中查找指定元素_如何从一个数组中查找指定的元素,并返回这个元素在数组中的位置...

    展开全部 和Vector都是使用Objec的数组形式来存储的.当你向这两种类型中增加元素的时候,如果元素的数目超出e68a84e8a2ad62616964757a686964616f313332646 ...

  5. 单链表删除所有值为x的元素_线性表之单链表

    单链表 一种以链接方式存储的线性表,适用于频繁增删操作,存储空间不定的情形. 单链表的一个存储结点包含两个域,数据域和指针域.数据域用于存储线性表的一个数据元素,指针域用于指示下一个结点开始的存储地址 ...

  6. java栈顶元素_栈在Java类库中的实现

    栈是一种后进先出的数据结构.在它之上,主要有三种操作: (1)判断栈是否为空--empty(): (2)在栈顶添加一个元素--push(E): (3)删除并返回栈顶元素--pop(). 在Java类库 ...

  7. java数组删除数组元素_如何在Java中删除数组元素

    java数组删除数组元素 When we create an array in Java, we specify its data type and size. This is used by JVM ...

  8. java 面试题合集_撩课-Java面试题合辑1-50题

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  9. java map按照value排序_基础:Java集合需要注意的 5 个问题

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 Java集合中的List.Set和Map作为Java集合食物链的顶级,可谓是各有千秋.本文将对于List.Set和Map之间的联系与区别进行 ...

最新文章

  1. 计算机桌面放大镜,电脑桌面放大镜软件(OneLoupe)
  2. PHP中常用的正则表达式函数
  3. 使用ansible来调度cron作业
  4. ft2232驱动安装方法_PC adapter USB驱动安装方法
  5. Mjpeg‐stream移植
  6. 话里话外:冯军的担心 “pk” 流程规范化
  7. 电脑注册表怎么清理_笔记本电脑维修|笔记本电脑屏幕怎么清理
  8. libspark,不懂日文怎么学……
  9. Java类加载过程梳理,一篇搞定
  10. Linux 命令 之 【chmod】 修改文件权限~
  11. Java语言实现查找两个字符串的最大公共字串
  12. FreeRTOS快速入门-初探FreeRTOS
  13. 码农自述:猝死瞬间,我在想些什么?
  14. A股各概念板块龙头股大全
  15. oracle+suspend+参数,oracle数据库的挂起(Suspending)和恢复(Resuming)
  16. 什么是“决策表”?什么是“决策树”?
  17. 用计算机打字用英语怎么说,打字用英语怎么说
  18. SQL学习(四)Where语句中的各种匹配方式
  19. \t\t我们一直在上演“混乱大都市”的神话传说
  20. Kafka的灵魂伴侣Logi-KafkaManger(4)之运维管控–集群运维(数据迁移和集群在线升级)

热门文章

  1. Triangle HDU - 5914
  2. 201609-5 祭坛
  3. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解
  4. YbtOJ-森林之和【dp】
  5. P6122-[NEERC2016]Mole Tunnels【模拟费用流】
  6. P4197-Peaks【Kruskal重构树,主席树】
  7. P3166-[CQOI2014]数三角形【GCD】
  8. P3377-[模板]左偏树(可并堆)
  9. P2814-家谱【图论,并查集,std map库】
  10. P2522 HAOI2011 Problem b [莫比乌斯反演,数论分块]