我正在尝试从头开始实现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,我们也会保留对其的引用。

10-08 11:14