Java 单链表:尝试在传递的类型对象参数之前删除元素

Java 单链表:尝试在传递的类型对象参数之前删除元素,java,singly-linked-list,Java,Singly Linked List,好的,所以我试着制作一个方法,将一个对象作为参数,如果在单链表中找到元素,则删除该对象之前的元素。我的问题是当我搜索第二个元素时。它遵循if(i==0)但不起作用,我不知道为什么。你能看看我的代码,告诉我为什么它不工作吗 主要内容: 方法: public Object removeBefore(Object o) { int i = 0; if (o == null) throw new NoSuchElementException("No such element"); N

好的,所以我试着制作一个方法,将一个对象作为参数,如果在单链表中找到元素,则删除该对象之前的元素。我的问题是当我搜索第二个元素时。它遵循
if(i==0)
但不起作用,我不知道为什么。你能看看我的代码,告诉我为什么它不工作吗

主要内容:

方法:

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)时的输出:


谢谢,我想你弄错了

删除列表中的第一个元素时,应将
更改为第二个节点。所以你应该写:

if (i == 0) {
    head = crt.next;
    return crt.content;
}
> run SingleLinkedLists.TestList
1
2
3
4
5
This is what I'm taking out: 2
1
3
4
5
> 
if (i == 0) {
    head = crt.next;
    return crt.content;
}