LinkedList delete:为什么我们不覆盖前一个头部?

时间:2019-11-01 21:40:07

标签: 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 = 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;

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

1 个答案:

答案 0 :(得分:1)

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

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

您打了delete(7),您的头将指向6,并且您将有一个[6, 8]的链接列表。