-2

私はリンクされたリストをいじっていて、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 ループで条件を入れ替えても、出力には影響しないはずです。

それがなぜなのか、それとも私がいつも間違っているのか、誰かが教えてくれますか.

お時間をいただきありがとうございます。

4

1 に答える 1