English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом примере мы узнаем, как получить средний элемент LinkedList в одном итерационном цикле на 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() - Возвратить элемент, находящийся в середине