我有这个功能,我的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 *
。
答案 0 :(得分:3)
第一次转让后你错过了;
。因此,编译器会像
node *tmp = *root * root ...
这会导致错误。 (提示:如果您无法获得编译器错误,请始终向后看一行。)
此外,在删除第一个节点后,请考虑释放内存(tmp
),否则会出现内存泄漏。这取决于您分配节点的方式:如果您new
,则使用delete tmp
;如果您malloc
,请使用free(tmp)
。好吧,如果你没有为每个节点分配内存(例如你分配了一整个节点数组然后使用它们)那么你不应该释放tmp
,但你可能想要将节点标记为空闲(取决于如何管理节点数组。)