如何从链表中删除节点?

时间:2012-03-30 00:36:06

标签: java linked-list

我有学生对象的链接链接。它基本上是一个数据库,用于存储有关学生作为学生对象的数据。我唯一的问题是创建removeStudent方法。下面发表的是我到目前为止所尝试的,改变它的不同部分以查看是否发生了不同的结果。现在使用此代码,我可以删除我的驱动程序中的学生,但它也会删除我想要删除的学生之前的所有学生,只留下我正在尝试的学生之后的数据库中的学生删除。

public void RemoveElements(Object Student) {

    LinearNode<Object> current = element;
    LinearNode<Object> temp = current;




    while (current.getNext()  != null) {

        temp = current;
        current = current.getNext();


        if(current.getElement() == Student) {


        temp.setNext(current.getNext());
        length--;
        }
    }

}

3 个答案:

答案 0 :(得分:1)

public void RemoveElements(Object Student) {

    LinearNode<Object> current = element;
    LinearNode<Object> previous = null;
    //LinearNode<Object>(student);



    while (current.getNext()  != null) {

        current = current.getNext();


        if(current.getElement() == Student) {

            length--;
            element = element.getNext();
            if (previous != null) { 
               previous.setNext(element.getNext();
            } else {
               //if you have a pointer to the head element place it element.getNext();
            }


        }
        previous = current;
    }

}

答案 1 :(得分:0)

如果当前包含要删除的对象,则需要获取对前一个节点的引用,并将其指向下一个节点。你有

A -> B -> C

和B包含要删除的项目,您希望链接列表看起来像

A -> C

您的代码存在一些问题

1)你没有做上述事 2)您没有在while循环中设置上一个。你可以在

之前做到这一点

current = current.getNext();

3)代码

LinearNode<Object> current = element;

在顶部,什么是element

答案 2 :(得分:0)

看起来element是列表的头部。查看更改element的代码并进行更改,以便在删除第二项时,element仍然指向第一个element,第一个元素指向第三个而不是第二个