假设给定链表为:$1 \rightarrow 3 \rightarrow 5 \rightarrow 7 \rightarrow \text{nullptr}$。若调用 searchValue(head, 5),函数返回值为( )。
int searchValue(ListNode* head, int target) {
while (head != nullptr) {
if (head->val == target) {
return 1;
}
head = head->next;
}
return 0;
}图的存储方式:邻接矩阵(O(n²)空间,适合稠密图)、邻接表(O(n+m)空间,适合稀疏图)。
有向完全图边数为n(n-1),无向完全图边数为n(n-1)/2。简单图不含自环和重边。
【考点】链表遍历|函数参数与返回值|循环条件控制
【解题思维】 函数签名已明示返回类型为int,目标值5在链表第三个节点。循环逐节点检查:第一个节点值1≠5,移动指针;第二个节点值3≠5,移动指针;第三个节点值5=5,满足条件立即return 1。这是链表线性搜索的标准流程——找到即停,没找到才遍历完返回0。
【陷阱拆解】 B选项(返回0)是典型误判:把"没找到"当成默认结果,忽略了函数在找到时提前退出的机制;C选项(死循环)属常识性错误,循环条件head != nullptr配合head = head->next保证必然终止;D选项(返回-1)是语义陷阱——命题人故意用常见返回值混淆视听,但代码写的是1不是-1。若只记"搜索函数返回0/1"而不读函数体,必选错。
【反命题思维】 把目标改成7,函数仍返回1,可迁移出的通法是:链表遍历类题目只考核"是否找到"而非"找到在哪",除非题目明确要求返回索引。刷到类似题先问自己:返回值代表什么含义?若题目要求返回位置,代码必须加计数器或改用带返回值的结构体,否则就是坑。