从pos中删除节点(i)

时间:2019-03-27 14:13:34

标签: java

因此,我正在尝试为学校创建一个链表,我与老师进行了讨论,并了解到您最初要删除的节点中的上一个节点将“替换”您要删除的节点,但是我可以并没有真正弄清楚为什么我的代码无法正常工作。是的,我知道我删除“ 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();
    }
}

2 个答案:

答案 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 ...