链接列表,removeFirst()不起作用

时间:2013-09-15 17:23:41

标签: c++ pointers linked-list

我有这个功能,我的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 *

1 个答案:

答案 0 :(得分:3)

第一次转让后你错过了;。因此,编译器会像

一样读取您的函数
node *tmp = *root * root ...

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

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