#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;
}

程序的作用是:

  • 输入 nn 个整数 v 依次插入到链表头部。
  • 再进行 q 次查询,每次判断一个值 v 是否在链表中,存在输出 yes,否则输出 no

关于 insertNode 函数和 insertVal 函数:

  • 此题的测试程序中没有提供这两个函数,如果需要使用可以去其他题目复制。

你的任务是实现 searchVal 函数:

  • 传入值 v,判断链表中是否存在数据域为 v 的节点。
  • 如果存在返回该节点。
  • 否则返回 NULL

题型说明

解题时可以把题目提供的程序复制到编译器中,编写对应所需的函数,测试通过后只需要提交所需的函数,如果提交完整程序反而会 WA

格式要求

输入格式

第一行输入一个整数 nn

接下来一行,输入 nn 个整数 v

紧接着输入一个整数 qq

接下来 qq 行,每行一个整数 v,代表待查询的数字。

所有整数的范围都在 11001 \sim 100

输出格式

输出 qq 行,每行一个 yesno,代表链表中是否存在值为 v 的节点。

样例

3
2 1 7
3
7
10
2
yes
no
yes