编程访谈中的错误暴露:链接列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程访谈中的错误暴露:链接列表相关的知识,希望对你有一定的参考价值。

我正在阅读编程访谈暴露的书。有一个代码用于在链接列表的前面插入一个元素。

bool insertInFront( IntElement **head, int data ){
    IntElement *newElem = new IntElement;
    if( !newElem ) return false;
    newElem->data = data;
    *head = newElem;
    return true;
}

恕我直言这段代码忘记更新新元素的下一个指针,不是吗?虽然我确信代码是错误的,但我只是想确认我的链表概念并非严重错误。

我相信代码应该在正确的位置添加以下行。

newElem->next = *head;

有人可以告诉我,我是对还是错?

答案

我不确定你正在阅读什么样的面试书,但这个代码示例是可怕的c ++。

是的,你需要在覆盖newElem->next之前将head指向旧的head。此外,没有理由检查newElem是否为NULL - 如果无法分配,C ++会抛出异常。此外,insertInFront应该是IntElement的成员函数,head应该是数据成员。

另一答案

由于这是插在前面,你是对的。新节点的下一个应该是当前头,然后应将头设置为指向新节点。

bool insertInFront( IntElement **head, int data ){
    IntElement *newElem = new IntElement;
    if( !newElem ) return false;
    newElem->data = data;
    newElem->next = *head;
    *head = newElem;
    return true;
}

当然,这里还有其他一些不好的风格和设计,或者说是错误的。

以上是关于编程访谈中的错误暴露:链接列表的主要内容,如果未能解决你的问题,请参考以下文章

在 JSP 中的 <% %> 代码片段中添加链接

如何从片段内的列表视图打开链接网址?

Android:RecyclerView 不显示片段中的列表项

从活动更新视图页面中片段中的列表视图

VSCode自定义代码片段——JS中的面向对象编程

由于未找到 ID 错误的视图,列表片段未出现