在此函数中,正确的指针未返回到调用函数

问题描述 投票:2回答:2

问题是当我删除节点后打印列表打印功能打印0代替已删除的节点.....但我希望它什么都不打印。

// the function call is delete_from_key(&head,i);
//node is struct linked_list
void delete_from_key(node *head, int key)
{
    node *new, *temp;
    if(head == NULL)
    {
        printf("nothing to delete . the list is empty.\n");
        return;
    }
    else if(head->num == key)
    {
        temp=head;
        head=temp->next;
        free(temp);
        return;
    }
    new=search_key(head, key);//search_key returns pointer node holding the key.
    if(new != NULL)
    {
        temp = new;
        new = new->next;
        free(temp);
        return;
    }
}

例:

名单是1-> 2-> 3-> 4-> 5-> 如果我用键2调用此函数 预期的产量是1-> 3-> 4-> 5-> 而实际的输出是1-> 0-> 3-> 4-> 5->

c pointers scope dynamic-memory-allocation singly-linked-list
2个回答
4
投票

你需要更新上一个节点qazxsw poi以及它的qazxsw poi被删除。

next

3
投票

First bug

next

由于prev_node=search_key(head, key);//search_key returns pointer to the node just before the node holding the key. if(prev_node!= NULL) { // prev_node->next is the one that needs to be deleted temp = prev_node->next; //Make the prev node point to the next node of the one that's getting deleted prev_node->next = temp->next; free(temp); return; } 是一个局部参数,因此该赋值会更改此局部参数。您需要更改传递给函数的指针,因此您需要使用以下代码:

head=temp->next;

2nd bug

head

有点同样的问题。 void delete_from_key(node **head, int key) //... *head=temp->next; //... 是一个局部变量。您正在更改局部变量,而不是更改列表中的指针。

如果new = new->next; 确实在找到所需的键之前返回指向节点的指针

new
© www.soinside.com 2019 - 2024. All rights reserved.