编程访谈中的错误暴露?

Sam*_*Sam 4 c++

我找不到本书第2版的勘误表.我的问题涉及下面一段代码中的if语句.

void removeHead (Node ** head) {
  Node * temp;
  if (!(*head)) {
    temp = (*head)->next;
    delete *head;
    *head = temp;
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我理解if语句的要点是检查Node是否为null.但是通过添加额外的"!" 对评估,这不会否定null的错误值吗?将其更改为以下内容是否正确?

if (*head) { ... }
Run Code Online (Sandbox Code Playgroud)

此外,如果有人知道我在哪里可以找到第二版的官方勘误,这将是伟大的.

谢谢,

山姆

Jef*_*eff 9

这本书有点瑕疵,因为它首先声称*head作为输入没有问题,然后进一步发展说你应该真正传入**head,然后说你应该检查*head.你真的需要检查*headAND head.

至于if (!(*head)),如果*head是NULL,这if (!0)将是真的.然后我们试着(0)->next去死.绝对是个错误.