查看我的数据结构,以了解一些新的工作面试要求。所以我有一个链接列表的删除方法。
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;
为什么不使用head
覆盖first
(在此示例中表示为previous
)?还是那个错误的逻辑?像
// just bypass it
previous.next = current.next;
first=previous;
我的意思是previous
和current
只是迭代列表的指针。删除后的真实数据位于first
中,对吗?很抱歉,为什么会这么想呢。有时,我在研究算法时才出现奇怪的直觉,主要是因为我有点虚弱
答案 0 :(得分:1)
这样做将导致您的链表丢失所有前一个节点。如果您的链接列表具有以下值:
[1, 2, 3, 4, 5, 6, 7, 8]
您打了delete(7)
,您的头将指向6
,并且您将有一个[6, 8]
的链接列表。