C 我试图返回包含值项的第一个节点,如果没有找到,则返回NULL
我正在尝试返回包含值项的第一个节点,如果没有找到,则返回NULL。我写了两个逻辑,根据我的观点是相同的。但是为什么我在其中一个中得到了错误的输出C 我试图返回包含值项的第一个节点,如果没有找到,则返回NULL,c,gcc,linked-list,C,Gcc,Linked List,我正在尝试返回包含值项的第一个节点,如果没有找到,则返回NULL。我写了两个逻辑,根据我的观点是相同的。但是为什么我在其中一个中得到了错误的输出 //THIS IS GIVING ME THE CORRECT OUTPUT struct nodeStruct* List_findNode(struct nodeStruct *head, int item){ struct nodeStruct *temp_node=head; while (temp_node!=NULL)
//THIS IS GIVING ME THE CORRECT OUTPUT
struct nodeStruct* List_findNode(struct nodeStruct *head, int item){
struct nodeStruct *temp_node=head;
while (temp_node!=NULL)
{
if (temp_node->item == item)
{
return temp_node;
}
temp_node=temp_node->next;
}
return NULL;
}
//BUT ACCORDING ME THIS IS THE SAME LOGIC BUT IT'S GIVING WRONG OUTPUT.
struct nodeStruct* List_findNode(struct nodeStruct *head, int item){
struct nodeStruct *temp_node=head;
while (temp_node!=NULL)
{
if (temp_node->item != item)
{
temp_node=temp_node->next;
}
return temp_node;
}
return NULL;
}
在后一种情况下,需要继续,否则函数将始终返回
while (temp_node!=NULL)
{
if (temp_node->item != item)
{
temp_node=temp_node->next;
continue; // here
}
return temp_node;
}
也就是说,您还可以使用for循环:
struct nodeStruct* List_findNode(struct nodeStruct *head, int item) {
for (struct nodeStruct *temp_node = head;
temp_node != NULL;
temp_node = temp_node->next) {
if (temp_node->item == item) {
return temp_node;
}
}
return NULL;
}
在第二个代码中,您在
内有无条件返回,而此返回临时节点代码>语句应该保留在else
块中,否则在第一次迭代之后,无论是否找到项,它都将返回。谢谢。但当条件满足时,控制是否会再次返回while循环?另外,返回的temp_节点不是在这里被自动视为else条件吗?我真的不理解你的评论,但是你试图反转第一个if,它是if(this),然后返回;(其他)下一步;(继续)
(else是隐式的)。因此,反向测试是if(!this),然后{next;continue;}else{return;}