从双链表中删除项目

时间:2014-05-01 17:08:14

标签: c list pointers

我试图编写代码,从双链表中删除给定位置的元素。但是,我的代码导致元素没有被删除,而是被垃圾数据替换。

我在列表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;
};

2 个答案:

答案 0 :(得分:1)

在尝试删除元素之前,列表可能出现问题。

在删除之前向我们展示一个格式正确的列表。向我们展示列表的代码。向我们展示struct el_L2k的声明。

答案 1 :(得分:0)

尝试签名void removeFromPosition(struct L2k **, int )

当您在代码中传递第一个参数时,您的头部将作为本地变量(具有本地范围)复制到您的函数中。函数返回时,作用域结束,默认情况下转储变量。这就是为什么你得到一个值的垃圾,你的指针是完整的。使用指向头部的指针作为第一个参数,并相应地修改代码。你会得到一个适当的删除。

祝你好运!