【发布时间】:2022-01-07 07:11:01
【问题描述】:
我的代码的主要目的是从用户那里获取数据,然后搜索单链表找到目标,然后删除所有等于目标的节点。 这也是基础单链表:
typedef struct Node
{
int data;
struct Node *next;
}no;
输入: 1, 2, 3, 2, 5 --> to delete= 2
所以新的链表是:1,3,5
void* toDElduplicatedlinkedlist (no* firstNode, int target)
{
no* current = firstNode;
no* ptemp;
while ( NULL != current->next)
{
if (firstNode->data == target)
{
current = firstNode->next;
free(firstNode);
}
else if (current->next->data == target)
{
ptemp = current->next;
current->next= current->next->next;
free(ptemp);
}
current = current->next;
}
这是我写的删除函数。
它适用于链接列表中间的目标项目,但是当列表头部的firstNode 是目标时,它要么不删除它,要么丢失头地址,我尝试了很多方法来保存列表的头部,使其不会松动。
它也不适用于最后一个节点为目标的情况。
我一直在努力解决这个问题,但我无法解决它,所以如果有人帮助我解决这个问题,我会很高兴和感激。
【问题讨论】:
-
您在循环的每次迭代中检查
firstNode值,即使在第一个节点可能被释放之后也是如此。您可能会遇到释放后使用错误。莫斯科的回答中@Vlad 中还指定了其他设计缺陷 -
哦,我明白了。谢谢@MichaelSohnen
标签: c struct free singly-linked-list function-definition