Вместо того, чтобы давать прямой ответ на этот вопрос, я предлагаю общую методологию для нацеливания на такие вопросы.
Чтобы нацелить эти вопросы, прежде всего, вам нужно разработать алгоритм. Как я вижу, вы уже выяснили, что у вас есть временная переменная и позволяет ей перемещаться по связанному списку. Однако он, кажется, еще недостаточно зрел.
Во-вторых, вам нужно подумать об инкапсуляции данных и обязанностях классов. Я вижу, что ваш класс myexample
содержит три поля: head
, tail
и size
. Итак, за что отвечает myexample
? Это реализация оболочки linkedlist
? В таком случае необходимы другие подходящие методы. Вам необходимо определить роли и обязанности классов.
Между прочим, наличие tail
похоже на реализацию Doubly-linked-list
. Однако в вашем коде ничего не говорится о ссылках pre
. Кажется, вам тоже нужно это исправить.
Затем, когда вы что-то набросали, вы можете начинать кодирование. Ваша первая задача на этом этапе реализации - преобразовать свои мысли в компилируемые операторы языка программирования. Итак, введите свой код, а когда закончите, скомпилируйте его. Ваш загруженный код не компилируется. Вам нужно это исправить.
Также неплохо иметь тестовый пример, чтобы вы могли запускать и отлаживать свой код. Вам нужно продумать и разработать детали тестового примера. В вашем примере тестовый код должен создать связанный список и вызвать removeAtIndex
.
Рассмотрим этот фрагмент кода:
for (int i = 0; tempNode != null && i < index - 1; i++) {
tempNode.setNext(tempNode);
}
Давайте проследим это. До l oop, tempNode
присваивается чему-то (на самом деле head
). L oop выполняет итерацию, и следующий указатель tempNode присваивается самому себе (таким образом теряются ссылки на остальную часть связанного списка). Вы не обновляете tempNode
в l oop, поэтому код выполняет это index-1
количество раз. L oop разрывает связи в первой итерации, а затем ничего не делает в следующих итерациях. Похоже, в этом l oop есть ошибка, и я думаю, вы заметили, в чем ошибка и как ее исправить.