我正在尝试从头开始实现LinkedList
,并且难以理解deleteFirst()
方法,该方法会删除列表中的第一个Link
。为什么必须将firstLink
的引用保存到临时Link
对象,然后将其返回?我不明白为什么必须将firstLink
引用分配给temp
对象,然后将其返回,但是为什么返回连续的Link
对象呢?为什么我不能简单地做到这一点?
firstLink = firstLink.next;
return firstLink
类别
Link
:public class Link {
public String bookName;
public int quantity;
public Link next;
public Link(String bookName, int quantity){
this.bookName = bookName;
this.quantity = quantity;
this.next = null;
}
public void display(){
System.out.println("The number of " + bookName + " is " + quantity);
}
}
class LinkedList{
public Link firstLink;
public LinkedList(){
this.firstLink = null;
}
public boolean isEmpty(){
return (firstLink == null);
}
public void insertLink(String bookName, int quantity){
Link newLink = new Link(bookName, quantity);
newLink.next = firstLink;
firstLink = newLink;
}
public Link deleteFirst(){
if(this.isEmpty()){
System.out.println("The list is empty!");
}
else{
Link temp = firstLink;
firstLink = firstLink.next;
return temp;
}
return null;
}
}
最佳答案
首先,您的列表在概念上看起来像这样
1 2 3
^
|
|
firstLink
然后,执行
firstLink = firstLink.next
,现在看起来像这样:1 2 3
^
|
|
firstLink
如果执行
return firstLink;
,则将返回2
。但是,您要返回已删除的元素,即1
。在
Link temp = firstLink
之后看起来像这样:1 2 3
^
|
|
firstLink AND temp
然后,
firstLink = firstLink.next
:1 2 3
^ ^
| |
| |
temp firstLink
由于存在临时变量,因此即使删除
1
,我们也会保留对其的引用。