如何删除只有一个指针指向要删除节点的单链表中的节点?
[起始和结束指针未知,可用信息是指向应删除节点的指针]
您可以在不获取前一个节点的情况下删除节点,方法是让它模仿以下节点并删除该节点:
void delete(Node *n) {
if (!is_sentinel(n->next)) {
n->content = n->next->content;
Node *next = n->next;
n->next = n->next->next;
free(next);
} else {
n->content = NULL;
free(n->next);
n->next = NULL;
}
}
正如您所看到的,您需要专门处理最后一个元素。我使用一个特殊的节点作为哨兵节点来标记结尾content
and next
be NULL
.
更新:行Node *next = n->next; n->next = n->next->next
基本上会打乱节点内容,并释放节点:您获得对要删除的节点 B 的引用的图像:
A / To be deleted
next ---> B
next ---> C
next ---> *sentinel*
第一步是n->content = n->next->content
:将以下节点的内容复制到要“删除”的节点:
A / To be deleted
next ---> C
next ---> C
next ---> *sentinel*
然后,修改next
points:
A / To be deleted
next ---> C /----------------
next ---| C |
next ---> *sentinel*
实际上释放了以下元素,进入最终情况:
A / To be deleted
next ---> C
next ---> *sentinel*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)