C 在链表中有两个(!=)运算符的while循环

C 在链表中有两个(!=)运算符的while循环,c,linked-list,C,Linked List,链表。我们插入要删除的元素的值,然后找到该值并将其删除。我在理解代码的find部分时遇到问题。我不明白这两个条件怎么可能都满足(!=) 好的,当我们找到我们正在寻找的值时,temp->value!=值已满足,但随后temp!=不满足NULL。我怎么能两者兼得呢。我真的不明白。他们都必须满足,但他们永远不会满足 有三种可能性 当您没有持有您要寻找的价值时: temp != null // statisfied temp->value != value // satisfied temp !

链表。我们插入要删除的元素的值,然后找到该值并将其删除。我在理解代码的find部分时遇到问题。我不明白这两个条件怎么可能都满足(!=)


好的,当我们找到我们正在寻找的值时,
temp->value!=值
已满足,但随后
temp!=不满足NULL
。我怎么能两者兼得呢。我真的不明白。他们都必须满足,但他们永远不会满足

有三种可能性

当您没有持有您要寻找的价值时:

temp != null // statisfied
temp->value != value // satisfied
temp != null // statisfied
temp->value != value // not satisfied
当您持有所需的价值时:

temp != null // statisfied
temp->value != value // satisfied
temp != null // statisfied
temp->value != value // not satisfied
当您位于列表末尾时(假设它以null结尾:

temp != null // not statisfied
temp->value != value // isn't evaluated (short-circuit using &&)

现在,您只需查看您是在列表的末尾还是在查找的值。因为很多时候,如果找不到值,搜索值方法返回
NULL
,您可能只需要返回您持有的值。

您在执行
循环时误解了
。其目的是通过l列表的元素(始终使
temp
成为下一个元素,直到下一个元素成为
NULL
指针),并在找到正确的值时停止。

当循环的条件为真时,循环将继续

(temp!=NULL) && (temp->value != value)
当条件为false时,循环将停止迭代;当条件的否定为true时,循环将停止迭代

!( (temp!=NULL) && (temp->value != value) )
这个(否定的)条件可以重写如下

!(temp!=NULL) || !(temp->value != value)

因此,当temp等于NULL或不等于NULL且temp->value等于value时,循环将停止迭代。 如果temp等于NULL,则表示找不到数据成员等于该值的节点。
如果TEMP不等于NULL,那么显然要删除要删除的目标节点。

当列表中间时,<代码> TEMP-<代码>什么都不能为NULL?在允许取消指针<代码> TEMP之前,需要验证它不是<代码> null < /C>指针。(
NULL
表示您没有实际对象,非
NULL
表示您有对象)。由于操作员
&&
进行短路评估,第二部分(
temp->value!=value
)仅在
temp!=NULL
时测试。此代码段的逻辑为“虽然我们还没有结束,还没有找到正确的节点,但请迭代”。