过去一年我一直在学习Java,而且我对数据结构非常熟练,但我总是想到一些我从未想过的东西。以下是一个例子:
public class SList{
private SListNode head;
private int size;
public void insertEnd(Object obj) {
if (head == null) {
head = new SListNode(obj);
} else {
SListNode node = head;
while (node.next != null) {
node = node.next;
}
node.next = new SListNode(obj);
}
size++;
}
假设已经实现了SListNode和SList构造函数,为什么“head”引用发生了变化,并且在没有像head = node这样的声明的情况下将Node添加到其末尾;在方法的最后?我知道这可能是非常基本的,但我一直在寻找一段时间,从来没有一个解释。
答案 0 :(得分:1)
SListNode node = head;
在这一行node
开始指向与head
相同的对象。因此,当您使用node
执行某些操作时,您将通过链接更改对象本身。所以请记住,在java中,一切都是指针,以便了解你在哪里犯了一个错误。
总的来说,我认为您希望收到类似这样的内容(只是主要想法的启动示例):
public void insertEnd(Object obj) {
if (head == null) {
head = new SListNode(obj);
} else {
SListNode node = head.next;
if (node != null {
while (true) {
node = node.next;
if (node == null)
break;
}
}
node = new SListNode(obj);
}
size++;
}