在此示例中,我们将学习在Java中的一次迭代中获取链表的中间元素。
要了解此示例,请确保您首先访问以下教程,
示例1:通过一次迭代获取LinkedList的中间元素
class LinkedList { //创建Node类的对象 //表示链表的头部 Node head; //静态内部类 static class Node { int value; //将每个节点连接到下一个节点 Node next; Node(int d) { value = d; next = null; } } public static void main(String[] args) { //创建一个LinkedList对象 LinkedList linkedList = new LinkedList(); //为每个链表节点赋值 linkedList.head = new Node(1); Node second = new Node(2); Node third = new Node(3); //将链表中的每个节点连接到下一个节点 linkedList.head.next = second; second.next = third; //打印链表 Node pointer = linkedList.head; System.out.print("LinkedList: " ); while (pointer != null) { System.out.print(pointer.value + " "); pointer = pointer.next; } // 找到中间元素 Node ptr1 = linkedList.head; Node ptr2 = linkedList.head; while (ptr1.next != null) { //将ptr1增加2,将ptr2增加1 //如果ptr1指向最后一个元素 //ptr2将指向中间元素 ptr1 = ptr1.next; if(ptr1.next !=null) { ptr1 = ptr1.next; ptr2 = ptr2.next; } } System.out.println("\n中间元素: " + ptr2.value); } }
输出结果
LinkedList: 1 2 3 中间元素: 2
在上面的示例中,我们已经用Java实现了链表数据结构。然后,我们在一个循环中找到链表的中间元素。注意代码,
while (ptr1.next != null) { //将ptr1增加2,将ptr2增加1 //如果ptr1指向最后一个元素 //ptr2将指向中间元素 ptr1 = ptr1.next; if(ptr1.next !=null) { ptr1 = ptr1.next; ptr2 = ptr2.next; } }
在这里,我们有两个变量ptr1和ptr2。 我们使用这些变量来遍历链表。
在每次迭代中,ptr1将访问两个节点,而ptr2将访问链表的单个节点。
现在,当ptr1到达链接列表的末尾时,ptr2将位于中间。 这样,我们可以在单次迭代中获得链表的中间位置。
示例2:使用LinkedList类获取LinkedList的中间元素
import java.util.LinkedList; class Main { public static void main(String[] args){ //使用 LinkedList 类创建链表 LinkedList<String> animals = new LinkedList<>(); //向 LinkedList 添加元素 animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("LinkedList: " + animals); //访问中间元素 String middle = animals.get(animals.size()/2); System.out.println("中间元素: " + middle); } }
输出结果
LinkedList: [Cat, Dog, Horse] 中间元素: Dog
在上面的示例中,我们使用了LinkedList类来实现链表数据结构。注意表达式
animals.get(animals.size()/2)
size()/ 2 - 返回中间元素的位置
get() - 返回位于中间位置的元素