Java 删除节点时出现问题
我正在处理一个链接列表,目前无法通过键值删除特定节点。我问学校的一个帮手,他不知道为什么它不起作用。(还有很多关于另一个问题的尝试,我为它看起来有多恶心而道歉) 以下是我的删除方法:Java 删除节点时出现问题,java,linked-list,Java,Linked List,我正在处理一个链接列表,目前无法通过键值删除特定节点。我问学校的一个帮手,他不知道为什么它不起作用。(还有很多关于另一个问题的尝试,我为它看起来有多恶心而道歉) 以下是我的删除方法: public void remove(int key) throws Exception { Node tmp = first; Node pred = first; while (tmp != null) { if (tmp.keyValu
public void remove(int key) throws Exception {
Node tmp = first;
Node pred = first;
while (tmp != null) {
if (tmp.keyValue == key) {
pred = tmp;
tmp = tmp.next;
} else {
tmp = tmp.next;
}
}
以下是我创建列表并尝试将其删除并打印的主要方法:
OrderedLinkedList oLL3 = new OrderedLinkedList();
try {
oLL3.insert("Should be removed", 5);
oLL3.insert("Shouldn't be removed 2nd", 15);
oLL3.insert("Shouldn't be removed", 10);
} catch (Exception e) {
System.out.println("Error: Two nodes with the same key value and the newest one won't be stored.");
}
try {
oLL3.remove(5);
} catch (Exception r) {
System.out.println("Error:No nod with the key value to be removed");
}
System.out.print("toString test removing node: \n" + oLL3.toString());
System.out.println("Number of nodes in the List:" + oLL3.listCount());
}
您的
remove
方法仅分配给局部变量。这不会影响链接列表中的状态。假设列表的标题是由字段first
持有的节点,则需要分配给另一个节点中的first
或.next
字段
要删除第一个节点,可以执行以下操作:
first = first.next;
prev.next = prev.next.next;
要在节点prev
之后删除节点,可以执行以下操作:
first = first.next;
prev.next = prev.next.next;
(适当时进行空检查)在此代码中,您正在删除链表的第一个节点,要删除第一个节点,您需要将“头”(或头节点的名称)指向第二个节点,即
head = head.next;
我的tmp和pred节点变量在remove方法中分配给first。或者你是说别的什么?它们是局部变量。分配给它们不会影响它们所属的方法之外的任何东西。所以你是说,我应该首先分配给非局部变量的对象,而不是先分配给方法中的局部对象?(除了first之外,我也不允许创建任何成员变量。)您所做的是将某些内容设置为
first
。您没有做的是先将设置为其他任何设置。因此,如果我只是将该节点更改为列表中的不同节点,则可以使用当前代码删除该节点?tmp(当前)和pred(前置)设置为first,这是一个成员变量。