Java LinkedList删除:为什么不';我们不能用前面的命令覆盖头部吗?

Java LinkedList删除:为什么不';我们不能用前面的命令覆盖头部吗?,java,algorithm,pointers,data-structures,linked-list,Java,Algorithm,Pointers,Data Structures,Linked List,查看我的数据结构,了解一些新的工作面试要求。所以我有一个链接列表的删除方法 public Link delete(int key) { Link current = first; Link previous = first; while(current.iData != key) { if(current.next == null) return null; else { previous

查看我的数据结构,了解一些新的工作面试要求。所以我有一个链接列表的删除方法

public Link delete(int key) {
    Link current = first;
    Link previous = first; 
    while(current.iData != key) {
        if(current.next == null) 
            return null;
        else {
            previous = current; 
            current = current.next;
        }
    }

    if(current == first)
        first = first.next;
    else
        // just bypass it
        previous.next = current.next;
    return current;
}
我想到目前为止我已经明白了。但我对这一行很好奇

// just bypass it
previous.next = current.next;
为什么我们不用
前面的
覆盖
头部(在本例中表示为
第一个
)?或者这是错误的逻辑?像

// just bypass it
previous.next = current.next;
first=previous;

我的意思是
previous
current
只是迭代列表的指针。删除后的真实数据位于
第一个
右侧?抱歉,如果这样想会很奇怪,为什么。有时我在研究算法时会产生奇怪的直觉,主要是因为我有点弱,这样做会导致你的链表丢失前一个节点之前的所有节点。如果有具有以下值的链接列表:

[1, 2, 3, 4, 5, 6, 7, 8]

你调用了
delete(7)
,你的头会指向
6
,你会有一个
[6,8]

的链接列表,实际上在我运行它之后,
first=previous
行不会影响
previous.next=current.next
结果。尽管你的答案在逻辑上是正确的,但我认为我的答案只能由languange架构师来回答,因为他们是设计内存模型的人。现在,每当我在面试中遇到这个问题时,我只关注指针(即previous.next=current.next已经足够了,因为它已经显示了删除节点的要点),我不确定你的意思。您的代码没有显示如何初始化
first
,因此我假设它是某个LinkedList类的成员变量。记忆模型与这个问题有什么关系?我已经对你的答案感到满意了。这已经很好地回答了这个问题:)