因此,我正在尝试为学校创建一个链表,我与老师进行了讨论,并了解到您最初要删除的节点中的上一个节点将“替换”您要删除的节点,但是我可以并没有真正弄清楚为什么我的代码无法正常工作。是的,我知道我删除“ head”的代码还不完整。
public class linkedList<T> {
private Node<T> head;
private Node<T> tail;
private int size;
public linkedList() {
head = tail = null;
size = 0;
}
public T remove(int pos){
Node<T> temp = head;
Node<T> removeNode = null;
if(pos >= size)
throw new IndexOutOfBoundsException("That posistion doesn't excist.");
for(int i = 0; i < pos - 1; i++) {
temp = temp.next;
if(pos == 0) {
head = temp.next;
head = null;
} else if(i < pos - 1) {
temp.next = null;
removeNode = temp.next;
temp = temp.next;
}
}
removeNode = temp;
size--;
return removeNode.getElement();
}
}
答案 0 :(得分:0)
temp.next = null;
removeNode = temp.next;
temp = temp.next;
这只是将所有内容设置为null,并且在foreach循环的每次迭代中都执行该操作。应该将其更改为不能清除所有内容的东西,并且只能执行一次。
找到正确的节点后,上一个节点的“下一个”变量将被更新,下一个节点的“上一个”引用将被更新。
答案 1 :(得分:0)
查看您的else分支:
您将temp.next
设置为null
。然后,将removeNode
设置为temp.next
-先前设置为null
。
我建议您使用对象及其之间的链接绘制一个草图。然后您会看到解决方案必须类似于temp.next.next
...