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;
}