Linked List方法,用于在具有给定节点值的节点之前删除节点

时间:2016-05-14 17:25:39

标签: java linked-list

这是我在节点具有给定节点值之前删除节点的方法,但是它不起作用,我该怎么办。例如,1到5,放入RemoveBefore(3),它将删除4。

public void RemoveBefore(int nodeValue) 
{
    Node curr = start;  

    while (curr != null) 
    {
        Node next = curr.next; 

        if (next!= null && next.nodeValue == nodeValue) 
        {                   
            curr= next.next;                
            return;
        }
        curr = curr.next;

    }
}

1 个答案:

答案 0 :(得分:0)

像你一样修改curr的值:

curr= next.next;

不会对列表本身进行任何更改,因为curr只是一个本地引用,更改引用不会更改它所指向的内容。

如果希望更改生效,则需要修改引用所指向的对象的内容。

在您的情况下,情况如下:

... -> prev -> curr -> next -> next.next -> ...

如果next具有您的价值,您希望prev直接指向next,实际上从列表中删除curr,如下所示:

... -> prev -> next -> next.next -> ...

这意味着您要更改prev,使其指向next而不是curr

因此,在您的代码中,您需要引入prev变量,并在要删除的节点本身就是开始时管理特殊情况:

startNode -> node2 -> node3 -> ...

必须成为:

node2 (the new start node) -> node3 -> ...

这就是我修改代码的方法:

public void RemoveBefore(int nodeValue) 
{
    Node curr = start;  
    Node previous = null;

    while (curr != null) 
    {
        Node next = curr.next; 

        if (next!= null && next.nodeValue == nodeValue) 
        {                   
            if( previous == null) {
                start = next;         // change directly the start of the list
            } else {
                previous.next = next; // point to next instead of curr   
            }
            return;
        }
        previous = curr;
        curr = curr.next;
    }
}