void addNewNode (struct node *head, int n)
{
struct node* temp = (struct node*) malloc(sizeof(struct node));
temp -> data = n;
temp -> link = head;
head = temp;
}
上面给出的代码是在链表头部添加新节点的函数的普遍错误版本。
一般来说,正确的版本是这样的,
void addNewNode (struct node **head, int n);
void addNewNode (struct node * &head, int n);
我为此目的设计了另一个但简单的函数,效果很好。
struct node* addNewNode (struct node *head, int n)
{
struct node* temp = (struct node*) malloc(sizeof(struct node));
temp -> data = n;
temp -> link = head;
return temp;
}
但我还没有看到它在代码和教程中被使用或讨论,因此我很好奇这种方法是否有一些缺陷。
缺陷在于您依赖调用者执行更新列表头指针的最后一步。
如果调用者忽略这样做,编译器不会抱怨,并且出于所有意图和目的,列表似乎没有更改(并且您将泄漏节点的内存)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)