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