为什么要记录链表中移除的第一个元素?
Why do I need to record the first element in removal in a linked list?
我正在尝试从头开始实施 LinkedList
,但无法理解删除列表中第一个 Link
的 deleteFirst()
方法。为什么我必须将 firstLink
的引用保存到一个临时的 Link
对象然后 return 它?我不明白为什么我必须将 firstLink
引用分配给 temp
对象然后 return 它,但是为什么 return 连续 Link
对象?为什么我不能简单地这样做?
firstLink = firstLink.next;
return firstLink
Class 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;
,你将 return 2
。但是,您想要 return 删除的元素,即 1
.
这看起来像这样,在 Link temp = firstLink
之后:
1 2 3
^
|
|
firstLink AND temp
然后,firstLink = firstLink.next
:
1 2 3
^ ^
| |
| |
temp firstLink
由于临时变量,我们保留了对 1
的引用,即使它已被删除。
deleteFirst()
方法有 2 个职责
- 删除列表中的第一项。
- 到 return 删除的项目
这是因为 LinkedList
实现了 Deque
并且这些是它设置的规则。
如果您不将其存储在 temp
变量中,您将无法 return 它。
我正在尝试从头开始实施 LinkedList
,但无法理解删除列表中第一个 Link
的 deleteFirst()
方法。为什么我必须将 firstLink
的引用保存到一个临时的 Link
对象然后 return 它?我不明白为什么我必须将 firstLink
引用分配给 temp
对象然后 return 它,但是为什么 return 连续 Link
对象?为什么我不能简单地这样做?
firstLink = firstLink.next;
return firstLink
Class 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;
,你将 return 2
。但是,您想要 return 删除的元素,即 1
.
这看起来像这样,在 Link temp = firstLink
之后:
1 2 3
^
|
|
firstLink AND temp
然后,firstLink = firstLink.next
:
1 2 3
^ ^
| |
| |
temp firstLink
由于临时变量,我们保留了对 1
的引用,即使它已被删除。
deleteFirst()
方法有 2 个职责
- 删除列表中的第一项。
- 到 return 删除的项目
这是因为 LinkedList
实现了 Deque
并且这些是它设置的规则。
如果您不将其存储在 temp
变量中,您将无法 return 它。