我试图编写代码,从双链表中删除给定位置的元素。但是,我的代码导致元素没有被删除,而是被垃圾数据替换。
我在列表4,5,11,12,6,9
上测试了代码并尝试删除第三个元素(11)。结果是4,5,767133(trash),12,6,9
。
有谁能告诉我以下代码的问题是什么?
struct L2k{
unsigned int count;
struct el_L2k *head;
struct el_L2k *tail;
};
struct L2k* removeFromPosition(struct L2k *L2k,int position)
{
if(position > L2k->count || position < 1)
{
printf("No such position\n");
return L2k;
}
int i;
struct el_L2k *temp = L2k->head;
for(i=1;i<position;i++)
temp=temp->next;
printf("Deleting %d",temp->data);
if(temp->prev!=NULL)
temp->prev->next=temp->next;
else
L2k->head=temp->next;
if(temp->next!=NULL)
temp->next->prev=temp->prev;
else
L2k->tail=temp->prev;
L2k->count--;
free(temp);
return L2k;
};
答案 0 :(得分:1)
在尝试删除元素之前,列表可能出现问题。
在删除之前向我们展示一个格式正确的列表。向我们展示列表的代码。向我们展示struct el_L2k的声明。
答案 1 :(得分:0)
尝试签名void removeFromPosition(struct L2k **, int )
。
当您在代码中传递第一个参数时,您的头部将作为本地变量(具有本地范围)复制到您的函数中。函数返回时,作用域结束,默认情况下转储变量。这就是为什么你得到一个值的垃圾,你的指针是完整的。使用指向头部的指针作为第一个参数,并相应地修改代码。你会得到一个适当的删除。
祝你好运!