在java中从链表中删除节点

在java中从链表中删除节点,java,linked-list,Java,Linked List,我正在用LinkedList制作一个字典类型的程序,但是我不能使用LinkedList实用程序,我必须创建我自己的,所以我不能使用任何这些方法,我必须删除一个节点,而且我一辈子都无法解决它。我可以在纸上做,但在代码中,它要么删除它之前的所有内容,要么只是冻结等等。以下是我到目前为止对delete方法的了解: void delete(String w) { WordMeaningNode temp = list; WordMeaningNode current =

我正在用LinkedList制作一个字典类型的程序,但是我不能使用LinkedList实用程序,我必须创建我自己的,所以我不能使用任何这些方法,我必须删除一个节点,而且我一辈子都无法解决它。我可以在纸上做,但在代码中,它要么删除它之前的所有内容,要么只是冻结等等。以下是我到目前为止对delete方法的了解:

void delete(String w)
{ 
        WordMeaningNode temp = list;
        WordMeaningNode current = list;
        WordMeaningNode back = null;
        boolean found = false;
        while(current != null && !found)
        {
            if( current.WordMeaning.getTitle().equals(w))
            {
                found = true;
                System.out.println("found it!");
            }
            else
            {
                back = current;
                current = current.next;
            }
         temp = current.next; //this is where the problem starts
         back.next = temp;
         }
}
我这样称呼它:

String delWord = JOptionPane.showInputDialog("Enter word to be deleted");
                WordMeaning.delete(delWord);
或者我只是不理解编码的概念,我的老师想要的不是真正的“删除”节点,只是将当前之前的节点重定向到当前之后的节点,有人能帮我吗?

删除节点的“跳过”需要在匹配if station中

public boolean deleteMiddleNode(Node middleNode)
{
//error check:
if  (middleNode  ==  null  ||  middleNode.next  ==  null)
return false;

/*
middleNode is x in our example data above, but
is now changed to hold the data of node y:
*/
middleNode.data = middleNode.next.data;

/*tempNode now holds node z if following
the example above:  */
Node tempNode = middleNode.next.next;
//delete the old node Y from example above
delete(middleNode.next);
/*reset pointer so that the new "y" points
  to z
*/
middleNode.next = tempNode;
}
假设1:变量“list”始终指向列表的第一个元素

假设2:该列表不是循环的。否则,算法可能不会终止

但是,除了下面的实现之外,您还必须处理边界情况(空列表、带有一个元素的列表,如果您删除第一个条目)

 void delete(String w) { 
    WordMeaningNode current = list;
    WordMeaningNode back = null;
    boolean found = false;
    while(current != null && !found)
    {
        if( current.WordMeaning.getTitle().equals(w))
        {
            found = true;
            System.out.println("found it!");
            back.next = current.next;
        }
        else
        {
            back = current;
            current = current.next;
        }
     }
 }

是双链表/循环链表/单链表吗?。在单链表中,不能向后遍历。因此,您必须从头开始循环查找元素并将其删除它是一个单链表a-->B-->C-->D--|在本例中就是这样。列表变量应始终指向列表中的第一个元素。如果列表指向第一个元素,@Wintermute-answer非常适合您的问题。您只需考虑将当前对象点设置为1。否则它将无法避免这种遍历问题。尝试实现双链表。Java LinkedList是双头的,如果单词超出当前值怎么办?如果链表不循环示例:“节点1”->“节点2”->“节点3”。使用上述代码,您可以删除“节点2”和“节点3”。“节点1”将导致NullPointerException。你能解释一下你的评论吗?假设你有节点1->节点2->节点3-节点4。当前点指向节点3。如果用户想要删除节点1。除非当前为节点1,否则上述代码将无法工作。他没有提供有关如何实现链接列表的信息。“节点1”将导致NullPointerException。不是真的。因为while循环终止,节点1不会删除,也不会异常抛出,所以我不能使用此方法,因为我可以使用delete方法:/