Одиночные связанные списки: попытка удалить элемент перед параметром 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;
}
Другие вопросы по тегам