Простая задача на понимание односвязных списков. Однако, несмотря на то, что задача несложная, многие кандидаты пугаются и начинают путаться в показаниях.
Дано: односвязный список
N1->N2->N3->...->Nn и указатель на его голову
N1.
Нужно: развернуть список за один проход так, чтобы стало
Nn->Nn-1->Nn-2->...->N1.
Возможно здесь чисто психологический момент. Ответ, который знает человек, кажется ему слишком простым, и в этом видится подвох. Человек начинает искать более сложное решение и либо не находит его, либо находит неверное.
ОтветитьУдалитьДа, я согласен. Собеседование - это всегда стресс.
ОтветитьУдалитьОпублекуйте, пожалуйста, ответ. Мне как новичку было бы полезно знать;)
ОтветитьУдалитьЗадача довольно простая. Нужно перебрать все элементы списка и на каждой итерации изменять значение поля next, чтобы оно указывало на предыдущий элемент.
ОтветитьУдалитьЗадача на самом деле совсем не простая. Уважаемый, White Knigh, Вы сами-то пробовали сесть и написать код, который решает эту задачу?
ОтветитьУдалитьЕсли у нас есть уже реализованный SinglyLinkedList, то задача сведется примерно к следующему:
for(int i=0, size=list.size(); i<list.size; i++) {
list.add(list.pop());
}
Но! Покажите мне существующую в Java реализацию настоящего односвязного списка?!
Итого, задача про разворот односвязного списка сводится к реализации односвязного списка! А это уже совсем-совсем другое дело.
Вот Вы говорите: "Нужно перебрать все элементы списка и на каждой итерации изменять значение поля next". Это же чушь!
Класс Entry лежащий, например, внутри LinkedList (двунаправленный связный список) - приватный! И взять от него next невозможно!
Итого: этот вопрос идиотский. На собеседовании его задавать нельзя! Можно спросить "Что такое связанный список?" и выяснить, знает ли кандидат базовые структуры данных.
Уважаемый, Анонимный.
ОтветитьУдалитьЭта задача именно на знание структуры данных под названием "односвязный список" и содержит все необходимые для решения условия. Её на собеседованиях задают как раз после ответа на вопрос "Что такое связанный список и как он устроен?" :) Решить эту задачу можно даже в псевдокоде. Попробуйте отбросить эмоции и временно забыть свои глубокие познания языка Java и взглянуть на задачу с точки зрения базовых структур данных.