【发布时间】:2020-08-13 16:41:54
【问题描述】:
我想编写一种算法,开始删除在第 k 次出现后给定的元素的出现,但我构建的算法删除了所有出现的元素! 我可以得到一些帮助来改进我的算法吗?提前致谢。
typedef struct list
{
int data;
struct list *next;
}list;
list * delete_2(list *head,int element,int k)
{
list *previous,*temp,*new_head=head; previous=temp=NULL;
bool stop=true; int i=0;
if(head == NULL) return NULL;
while(head != NULL)
{
if(new_head->data == element && stop)
{
if(i>=k)
{
temp=head;
new_head=head->next;
head=new_head;
free(temp);
}
else i++;
}
else if(head->data==element)
{
if(i>=k)
{
if(head->next==NULL)
{
temp=head;
previous->next=NULL;
head=head->next;
free(temp);
}
else
{
temp=head;
previous->next=previous->next->next;
head=head->next;
free(temp);
}
}
else i++;
}
else
{
previous=head;
head=head->next;
stop=false;
}
}
return new_head;
}
【问题讨论】:
标签: c algorithm linked-list iteration