私はリンクされたリストをいじっていて、AND演算を使用したWhileループのいくつかの珍しい特徴を知るようになりました(そうだと思います)。
ここにそれが何であるか:
これが私の削除機能です。削除するキーを探しています。
void delet(Mynode** head,int value) {
printf(" deleting... %d\n",value);
Mynode *temp = *head,*prev;
if(temp->val == value) {
*head = (*head)->next;
free(temp);
return;
} else {
while( temp->val != value && temp != NULL) {
prev = temp;
temp=temp->next;
}
}
if(temp == NULL) {
printf("..and %d is not in the list\n",value );
} else{
prev->next = temp->next;
}
}
while ループでは、このように条件をチェックしています。リスト内の値に対してのみ適切に機能しました。
削除する値がリストにない場合、セグメンテーション違反がスローされます。
while( temp->val != value && temp != NULL) {
prev = temp;
temp=temp->next;
}
しかし興味深いのは、while ループで条件を入れ替えると、エラーなく正常に動作することです。あれは:
while( temp != NULL && temp->val != value)
while ループで条件を入れ替えても、出力には影響しないはずです。
それがなぜなのか、それとも私がいつも間違っているのか、誰かが教えてくれますか.
お時間をいただきありがとうございます。