链接列表删除:为什么我们不用 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;

为什么我们不用previous覆盖head(在本例中表示为first(?或者这是错误的逻辑吗?像

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

我的意思是previouscurrent只是迭代列表的指针。删除后的真实数据是否位于first中?很抱歉,如果这样想会很奇怪。有时我奇怪的直觉只是在研究算法时表现出来的,主要是因为我有点弱

这样做会导致链表丢失前一个节点之前的所有节点。如果您有一个包含以下值的链接列表:

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

当你呼叫delete(7)时,你的头会指向6,你会得到一个[6, 8]的链表。

相关内容

  • 没有找到相关文章

最新更新