Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编程面试中的漏洞暴露:链表_C++_List_Insert_Linked List - Fatal编程技术网

C++ 编程面试中的漏洞暴露:链表

C++ 编程面试中的漏洞暴露:链表,c++,list,insert,linked-list,C++,List,Insert,Linked List,我正在翻阅这本书。有一个代码用于在链表前面插入一个元素 bool insertInFront( IntElement **head, int data ){ IntElement *newElem = new IntElement; if( !newElem ) return false; newElem->data = data; *head = newElem; return true; } 这段代码怎么会忘记更新新元素的下一个指针呢?虽然我确

我正在翻阅这本书。有一个代码用于在链表前面插入一个元素

bool insertInFront( IntElement **head, int data ){
    IntElement *newElem = new IntElement;
    if( !newElem ) return false;
    newElem->data = data;
    *head = newElem;
    return true;
}
这段代码怎么会忘记更新新元素的下一个指针呢?虽然我确信代码是错误的,但我只想确认我的链表概念并没有严重错误

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

newElem->next = *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;
}

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

因为这是在前面插入的,所以您是对的。新节点的下一个应该是当前头部,然后头部应该设置为指向新节点

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

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

< P>我不确定你在读什么样的采访书,但是这个代码例子是可怕的C++。p>
是的,在覆盖磁头之前,您需要将newElem->指向旧磁头旁边。此外,没有理由检查NeReMe是否为空——如果不能分配,C++会抛出异常。此外,插入前应该是一个成员的函数,而头应该是一个数据成员。

< P>我不确定你在读什么样的采访书,但是这个代码例子是可怕的C++。p>
是的,在覆盖磁头之前,您需要将newElem->指向旧磁头旁边。此外,没有理由检查NeReMe是否为空——如果不能分配,C++会抛出异常。另外,insertInFront应该是InteElement的成员函数,head应该是数据成员。

您可以将其视为bug。您的答案很好。除了UGLYNY之外,代码没有更多的问题:YCK,那就是C++?new never返回null,第一个参数应该是reference never检查null,pass null检查head和boom;引用跳过了这一混乱,IntElement应该有一个构造函数来获取数据,否则你在构造和分配数据,而不是只是初始化,是的,它忘记了在旧的头中链接。Sherlock可能会说,面试的问题是找到这个代码的问题,所以这本书似乎可以追溯到2000年左右。在这种情况下,他们可能是针对一个尚未符合'98标准的编译器工作的。当时VS6是最新的,但肯定与标准有很多偏差。这可以解释空测试的问题。但即便如此,总体而言,它仍然是糟糕的代码。您可以将其视为一个bug。您的答案很好。除了UGLYNY之外,代码没有更多的问题:YCK,那就是C++?new never返回null,第一个参数应该是reference never检查null,pass null检查head和boom;引用跳过了这一混乱,IntElement应该有一个构造函数来获取数据,否则你在构造和分配数据,而不是只是初始化,是的,它忘记了在旧的头中链接。Sherlock可能会说,面试的问题是找到这个代码的问题,所以这本书似乎可以追溯到2000年左右。在这种情况下,他们可能是针对一个尚未符合'98标准的编译器工作的。当时VS6是最新的,但肯定与标准有很多偏差。这可以解释空测试的问题。但即便如此,总体而言,它仍然是糟糕的代码。