如何在C中的链表中删除节点

时间:2013-02-16 19:48:47

标签: c free

我有一个非常基本的疑问。我使用结构创建了一个链接列表,这是我的删除代码。

void delete(int num)
{
struct node* temp=head;
struct node* prev=head;
if(temp == NULL)
printf("List Empty\n");
else
{
while(temp != NULL)
{
    if(temp->value == num)
    {
            prev=temp->next;
            free(temp);     
            break;
    }
    else
    {       
            prev=temp;
            temp=temp->next;        

    }
}

运行此代码后,节点不会被删除。如果我在free(temp)之后打印temp->值,则该值为0.但不应该是这种情况。免费应该擦除节点。所以我不明白0出现在哪里。知道这个代码有什么问题吗?

我的节目功能:

void show()
{
struct node *temp = head;
while(temp != NULL)
{
printf("----  %d  ---- ", temp->value);
temp=temp->next;
}
printf("\n\n");
}

我的结构:

struct node
{
int value;
int pos;
struct node* next;
};

感谢。

1 个答案:

答案 0 :(得分:2)

delete中找到节点时:

if(temp->value == num)
{
        prev=temp->next;
        free(temp);     
        break;
}

实际上,您实际上并没有使前一个节点的下一个指针指向下一个链接的节点。

相反,你应该这样做。

prev->next = temp->next;