链表,删除第一()不起作用

Linked lists, removeFirst() not working

本文关键字:不起作用 删除 链表      更新时间:2023-10-16

我有一个我的g++似乎不喜欢的函数,我不知道为什么。

我写了它,所以它可能有问题,但我看不到编译器指示的错误。

我在这里粘贴相关部分。

// STRUCT
struct node {
  int data;
  node * next;
};
// PROTOTYPE
void removeFirst( node ** root );
// DEFINITION
void removeFirst( node ** root ) {
    node * tmp = *root
    *root = tmp->next; // is equivalent to (*root)->next
}
linkedLists.cpp:89:2: error: invalid operands to binary expression ('node *' and 'node **')
        *root = tmp->next;
        ^~~~~
1 error generated.

注意:我实际上不需要删除tmp,因为它只是一个普通的node *

您在第一次作业后错过了;。因此,编译器像读取您的函数一样

node *tmp = *root * root ...

这会导致错误。(提示:如果无法获得编译器错误,请始终向后查看一行。

另外,请考虑在删除第一个节点后释放内存(tmp),否则会出现内存泄漏。这取决于您如何分配节点:如果您new它们,则使用 delete tmp ;如果malloc它们,请使用 free(tmp) 。好吧,如果您不为每个节点分配内存(例如,您分配整个节点数组然后使用它们),那么您不应该tmp释放,但您可能希望将节点标记为空闲(取决于您如何管理节点数组)。