1.while(p)
在链表等数据结构的操作中,p通常是一个指向节点的指针。while(p)这个条件判断语句的意思是,只要p所指向的节点不为NULL(在 C/C++ 中,NULL表示空指针,也就是没有指向有效的内存地址),就会执行循环体中的代码。
例如,在遍历链表时,当p指向链表中的一个节点时,while(p)循环会继续,直到p到达链表的末尾,也就是p = NULL的情况。假设p是一个struct ListNode*类型的指针(struct ListNode是链表节点的结构体),代码可能如下:
struct ListNode* p = head; // head是链表头节点指针
while(p) {
// 在这里可以访问p所指向节点的成员,比如p->val(节点的值)和p->next(指向下一个节点的指针)
printf("%d ", p->val);
p = p->next; // 将p指向下一个节点
}
这里的while(p)循环会逐个输出链表节点的值,直到p为NULL,也就是遍历完整个链表。
2.if(p)
同样,if(p)也是判断p是否为非空指针。如果p不是NULL,那么if语句块中的代码会被执行。
例如,在插入节点到链表的操作中,可能需要先检查某个指针是否有效,代码如下:
这里的if(p)语句用于判断找到的插入位置指针是否有效,以便正确地插入新节点。