当我想从NodeList中删除特定节点时遇到了问题,
void removeNode(Node head, int value){
if (head == null) {
System.out.println("error : Null linkedList");
} else {
Node cur = null;
if (head.item == value) {
//The problem is here.
head = head.next;
} else {
cur = head;
while( cur.next != null && cur.next.item != value) {
cur = cur.next;
}
if(cur.next != null && cur.next.item == value){
cur.next = cur.next.next;
}
}
}
}
如您所知,定义了节点的形式:
public class Node{
int item;
Node next;
}
我的测试是这样的:
void test(){
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
Node node4 = new Node();
node1.item = 1;
node2.item = 2;
node3.item = 3;
node4.item = 4;
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = null;
}
我做的时候进展顺利
removeNode(node1,2);
removeNode(node1,3);
removeNode(node1.4);
但我无法删除第一个节点
removeNode(node1,1);
它不起作用,所以我在这句话中设置了一个调试点。在调试模式中,我清楚地看到执行该句后,“node1”变为“node2”,其“item”等于“2”。但退出整个“removeNode”后,node1返回原来的“node1”,其“item”等于“1”。
我认为我在方法中使用的“头”是node1的副本,但我了解到Java总是使用引用传递参数。我很困惑这个方法里面的“头”是什么。