@dc65k

Как найти средний элемент в LinkedList за один проход?

Всем привет. Вопрос, конечно, очень дилетантский, но всё же был бы благодарен помощи в объяснении.
Изучаю Java, прошел теоретический материал по коллекциям, и решили попрактиковаться.
Нашел решение данной задачи:
https://javarevisited.blogspot.com/2012/12/how-to-...
Но, что мне не понятно, здесь представлена своя реализация класса LinkedList.
Соответственно у меня следующие вопросы, первый, зачем делать свою реализацию, второй, как решить эту задачу, используя import java.util.LinkedList;
Чтобы начиналось примерно вот так:
import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String args[]) {
        // creating LinkedList with 5 elements including head
        LinkedList linkedList = new LinkedList();

        linkedList.add("1");
        linkedList.add("2");
        linkedList.add("3");
        linkedList.add("4");
        linkedList.add("5");

Ещё раз повторю, что вопрос дилетантский, но, хотелось бы понять этот момент.

Насчет вопроса, как решить эту задачу:
import java.util.LinkedList;
import java.util.List;

public class Main {

    public static List<String> findMiddleElementLinkedList(LinkedList<String> linkedList) {

        System.out.println("linkedList " + linkedList);

        return List.of(linkedList.get((linkedList.size() - 1) / 2));

    }

    public static void main(String[] args) {

        LinkedList linkedList = new LinkedList();

        linkedList.add("1");
        linkedList.add("2");
        linkedList.add("3");
        linkedList.add("4");
        linkedList.add("5");

        System.out.println(findMiddleElementLinkedList(linkedList));

    }
}


Остается первый вопрос: зачем в этом примере:
https://javarevisited.blogspot.com/2012/12/how-to-...
использовать собственную реализацию?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
Senior Junior Roo
В задаче сказано "you need to find the middle element of LinkedList in one pass and you don’t know the length of LinkedList."
Видимо для этого и была написана собственная реализация без метода length.

Решение с java.util.LinkedList, без использования метода length:
public static void main(String args[]) {

        LinkedList<Integer> linkedList = new LinkedList();
        linkedList.add(1);
        linkedList.add(2);
        linkedList.add(3);
        linkedList.add(4);
        linkedList.add(5);
        linkedList.add(6);

        //finding middle element of LinkedList in single pass
        Iterator<Integer> current = linkedList.iterator();
        int length = 0;
        Iterator<Integer> middle = linkedList.iterator();
        Integer result = 0;

        while (current.hasNext()) {
            length = current.next();
            if (length % 2 == 0) {
                result = middle.next();
            }
        }

        if (length % 2 == 1) {
            result = middle.next();
        }

        System.out.println("length of LinkedList: " + length);
        System.out.println("middle element of LinkedList : " + result);

    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы