问题是当我删除节点后打印列表打印功能打印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->
你需要更新上一个节点qazxsw poi以及它的qazxsw poi被删除。
next
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;
head
有点同样的问题。 void delete_from_key(node **head, int key)
//...
*head=temp->next;
//...
是一个局部变量。您正在更改局部变量,而不是更改列表中的指针。
如果new = new->next;
确实在找到所需的键之前返回指向节点的指针
new