#6020. 循环双链表查找值
循环双链表查找值
题目描述
已知以下程序:
#include <bits/stdc++.h>
using namespace std;
struct Node {
int val;
Node *nxt, *pre;
};
Node *head;
int tot;
// 已包含 insertNode 函数和 insertVal 函数,本题省略
// ...
// 请在此处实现 searchVal 函数
// ...
int main() {
head = new Node;
head->nxt = head;
head->pre = head;
int n, q, v;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v;
insertVal(head, v);
}
cin >> q;
while (q--) {
cin >> v;
Node *p = searchVal(v);
if (p != NULL) cout << "yes" << endl;
else cout << "no" << endl;
}
for (Node *p = head->nxt; p != head; ) {
Node *q = p->nxt;
delete p;
p = q;
}
delete head;
return 0;
}
程序的作用是:
- 输入 个整数
v依次插入到链表头部。 - 再进行
q次查询,每次判断一个值v是否在链表中,存在输出yes,否则输出no。
关于 insertNode 函数和 insertVal 函数:
- 此题的测试程序中没有提供这两个函数,如果需要使用可以去其他题目复制。
你的任务是实现 searchVal 函数:
- 传入值
v,判断链表中是否存在数据域为v的节点。 - 如果存在返回该节点。
- 否则返回
NULL。
题型说明
解题时可以把题目提供的程序复制到编译器中,编写对应所需的函数,测试通过后只需要提交所需的函数,如果提交完整程序反而会 WA。
格式要求
输入格式
第一行输入一个整数 。
接下来一行,输入 个整数 v。
紧接着输入一个整数
接下来 行,每行一个整数 v,代表待查询的数字。
所有整数的范围都在 。
输出格式
输出 行,每行一个 yes 或 no,代表链表中是否存在值为 v 的节点。
样例
3
2 1 7
3
7
10
2
yes
no
yes