【发布时间】:2021-11-23 18:16:44
【问题描述】:
给你一个指向要从 N 个节点的链表中删除的节点的指针/引用。
Input:
N = 2,
value[] = {1,2},
node = 1 ,
Output: 2
我正在写这样的代码 -
void deleteNode(Node *del)
{
del->data=(del->next)->data;
del->next=(del->next)->next;
}
但给出的答案是-
void deleteNode(Node *del) {
Node* temp = del->next;
del->data = temp->data;
del->next = temp->next;
free(temp);
}
两个答案都是正确的,但不知道我的方法是对还是错?
【问题讨论】:
-
两个代码都存在一个问题,即它们不检查
next是否为NULL。 -
但是你的问题是:每次调用
malloc都应该对应调用free。否则,您最终可能会耗尽内存。 -
实际上有问题的是,它写到 next 不会是 NULL 。我的写作方式正确吗?
-
@ClickRick 由于 OP 声明“给定答案”(可能是由讲师)调用了
free(),我认为可以安全地假设它是用malloc()创建的。 -
@JohnnyMopp 大概排除了这种可能性,因为如果
next为空,您不能使用单链表以这种方式“删除”del。 (del,尽管它的名字,永远不会被删除;它被覆盖,next被删除。)
标签: c linked-list