Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从链接列表中删除节点?_Java_Linked List - Fatal编程技术网

Java 如何从链接列表中删除节点?

Java 如何从链接列表中删除节点?,java,linked-list,Java,Linked List,我有一个学生对象的链接。它基本上是一个数据库,将学生的数据存储为学生对象。我遇到的唯一问题是创建removeStudent方法。下面的帖子是我到目前为止所做的尝试,修改它的不同部分,看看是否会出现不同的结果。现在有了这段代码,我可以在我的驱动程序中删除一个学生,但它也会删除我想要删除的学生之前的每个学生,只留下数据库中我试图删除的学生之后的学生 public void RemoveElements(Object Student) { LinearNode<Object> c

我有一个学生对象的链接。它基本上是一个数据库,将学生的数据存储为学生对象。我遇到的唯一问题是创建
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--;
        }
    }

}
public void removeements(对象学生){
线性节点电流=元件;
线性节点温度=电流;
while(current.getNext()!=null){
温度=电流;
current=current.getNext();
if(current.getElement()==学生){
temp.setNext(current.getNext());
长度--;
}
}
}

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

A->B->C

如果B包含要删除的项,则您希望您的链接列表如下所示

A->C

您的代码有几处错误

1) 您没有执行上述操作
2) 您没有在while循环中设置previous。你可以早一点做

current=current.getNext()

3) 对于代码

LinearNode电流=元件

在顶部,什么是
元素

公共无效删除元素(对象学生){
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;
    }

}
线性节点电流=元件; LinearNode previous=null; //线性节点(学生); while(current.getNext()!=null){ current=current.getNext(); if(current.getElement()==学生){ 长度--; element=element.getNext(); 如果(上一个!=null){ previous.setNext(element.getNext(); }否则{ //如果有指向head元素的指针,请将其放置在element.getNext()中; } } 先前=当前; } }
看起来
元素
是列表的最前面。查看更改
元素
的代码,并对其进行更改,以便在删除第二项时,
元素
仍然指向第一个
元素
,第一个元素指向第三个而不是第二个。

不要为别人做作业。指南让他们理解。我也没有检查列表的末尾,所以这不会完全起作用,但有一点很好。+1因为没有做其他人的家庭作业。代码比盲目添加到项目中更好理解。他在问题标题中“隐藏它”:如何从链接列表中删除节点(搜索5分钟后找到)我明白了。我取消了对previous.setNext字符串的注释,并将previous设置为current。它现在可以工作了。无论如何,谢谢。loli还将LinearNode previous更改为temp,因为这样似乎更有意义。元素是列表的开头。