富平做网站,长沙岳麓区广告公司,寻找客户的平台,seo教学网seojava查找链表中间元素您如何一次找到LinkedList的中间元素是一个编程问题#xff0c;在电话采访中经常问Java和非Java程序员。 这个问题类似于检查回文或 计算阶乘 #xff0c;有时Interviewer还会要求编写代码。 为了回答这个问题#xff0c;候选人必须熟悉LinkedList的数… 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.htmljava查找链表中间元素