如何 !不同于 !=

how ! is different from !=

我正在编写函数,其目标是打印成对的列表,例如:

list : 1 2 3 4 5 6

pair list: 2 1 4 3 6 5

我写了下面的代码:

printPair(){
    bool flag = 1;
    node *temp = new node();
    node *temp2 = new node();
    temp2 = NULL;

    if(!head)
    {
        printf("Empty List!!");
        return 0;
    }
    temp = head;

    while(!temp && !temp->next)  //Error here 1.
    {
        if(!temp2)  //Error here 2.
            temp2->next->next = temp->next;
        temp2 = temp->next;
        temp->next = temp->next->next;
        temp2->next = temp;
        if(flag)
        {
            head = temp2;
            flag = 0;
        }
        temp = temp->next;
    }
}

如果替换为 :

则效果很好
1. `while(temp !=NULL && temp->next !=NULL)`
2. `if(temp2 != NULL)`

那么 !!= 有何不同?

while(!temp){} 将在 temp 的布尔值为 false 时执行。

while(temp != null) 将在 temp 具有除 null 以外的任何值时执行 (如果 temp 为真,它也会通过)

您想使用 while(temp != null) 因为您遵循 -> 下一个引用直到到达列表中的最后一项(temp->next 指向无处)