English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Java Map коллекция

Java Set коллекция

Java Вход/Выход (I/O)

Java Reader/Writer

Другие темы Java

Java программа получения среднего элемента LinkedList за один итерационный цикл

   Java полный список примеров

В этом примере мы узнаем, как получить средний элемент LinkedList в одном итерационном цикле на 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() - Возвратить элемент, находящийся в середине

Java полный список примеров