在此示例中,我们将学习在Java中的一次迭代中获取链表的中间元素。
要了解此示例,请确保您首先访问以下教程,
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将位于中间。 这样,我们可以在单次迭代中获得链表的中间位置。
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() - 返回位于中间位置的元素