Одиночные связанные списки: попытка удалить элемент перед параметром Object переданного типа
Итак, я пытаюсь создать метод, который принимает в качестве параметра объект и удаляет элемент перед этим, если он найден в единственном связанном списке. Моя проблема, когда я ищу второй элемент. Следует if (i == 0)
но не работает, и я не уверен, почему. Можете ли вы взглянуть на мой код и сказать, почему он не работает?
главный:
package SingleLinkedLists;
public class TestList {
public static void main(String[] args) {
SingleLinkedList testList = new SingleLinkedList();
testList.insertLast(1);
testList.insertLast(2);
testList.insertLast(3);
testList.insertLast(4);
testList.insertLast(5);
testList.print();
System.out.println("This is what I'm taking out: " + testList.removeBefore(2));
testList.print();
}
}
метод:
public Object removeBefore(Object o) {
int i = 0;
if (o == null)
throw new NoSuchElementException("No such element");
Node crt = head;
Node prev = crt;
// trying to find the element right before the parameter
while(crt.next != null && !o.equals(crt.next.content)) {
prev = crt;
crt = crt.next;
i++;
}
if (i == 0) {
prev = crt.next;
crt.next = null;
return crt.content;
}
if (crt.next == null)
throw new NoSuchElementException("No such element");
// remove crt node from list
prev.next = crt.next;
crt.next = null;
// return the removed content
return crt.content;
}
выход:
> run SingleLinkedLists.TestList
1
2
3
4
5
This is what I'm taking out: 1
1
>
выводится при использовании третьего элемента в качестве переданного параметра (3):
> run SingleLinkedLists.TestList
1
2
3
4
5
This is what I'm taking out: 2
1
3
4
5
>
Спасибо
1 ответ
Решение
Я думаю, что вы допустили ошибку.
Когда вы удаляете первый элемент вашего списка, вы должны изменить head
ко второму узлу. Поэтому вы должны написать:
if (i == 0) {
head = crt.next;
return crt.content;
}