为什么要记录链表中移除的第一个元素?

Why do I need to record the first element in removal in a linked list?

我正在尝试从头开始实施 LinkedList,但无法理解删除列表中第一个 LinkdeleteFirst() 方法。为什么我必须将 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 个职责

  1. 删除列表中的第一项。
  2. 到 return 删除的项目

这是因为 LinkedList 实现了 Deque 并且这些是它设置的规则。 如果您不将其存储在 temp 变量中,您将无法 return 它。