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

检查我的数据结构,以满足一些新的工作面试要求。所以我有一个链表的删除方法。


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?抱歉,如果这样想会很奇怪。有时我奇怪的直觉只是在研究算法时出现,主要是因为我有点弱


烙印99
浏览 94回答 1
1回答

暮色呼如

这样做会导致链表丢失前一个节点之前的所有节点。如果您有一个包含以下值的链接列表:[1, 2, 3, 4, 5, 6, 7, 8]当你打电话时delete(7),你的头会指向6,然后你就会得到一个 的链接列表[6, 8]。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java