NodePointer deleteNode(NodePointer head,int number)
{
NodePointer ptrNode;
NodePointer ptrNodePrev;
int count;
if(head == NULL)
{
printf("There is no element at list");
}
if(number == 1)
{
ptrNodePrev=head;
head=head->next;
free(ptrNodePrev);
}
else{
ptrNode=head;
while(ptrNode->next != NULL && count+1 != number){
count++;
ptrNodePrev=ptrNode;
ptrNode=ptrNode->next;
}
ptrNode=ptrNode->next;
printf("Node: %d-%d-%d - %s",ptrNodePrev->next->x.year,
ptrNodePrev->next->x.month,
ptrNodePrev->next->x.day,
ptrNodePrev->next->x.event);
printf("Successfully deleted");
free(ptrNodePrev->next);
ptrNodePrev->next=ptrNode;
}
return head;
}
嗨,我一直在学习单链表,想做一个例子。基本上我要求用户输入多少节点,他想要的,然后他填补他们。之后,我要求他们删除一个节点,然后他们将输入一个数字,这将删除相应的节点。它的罚款,如果输入的数字不是1,但如果它是那么我基本上会得到随机数。我不明白为什么会发生这种情况,我看了关于这个主题的大部分问题,但找不到原因。
1条答案
按热度按时间jjhzyzn01#
实际上,当
number
等于1
时,函数工作正常。也许在main中,您忘记将函数的返回值赋给指向头节点的指针,如
否则,函数将具有未定义的行为,因为1)变量
count
未初始化,2)在while循环后未检查count + 1
是否等于number
注意在C中索引从
0
开始。并且函数的第二个参数应该是无符号整数类型,例如size_t
。否则允许用户传递给函数一个负值。此外,该函数不应发出任何消息。
函数可以通过以下方式声明和定义。
如果在main中有一个指针声明
则函数的调用方式如下
其中
n
是指定列表中从0开始的索引的某个值。也就是说,如果要删除第一个节点,则应写入