#6018. 循环双链表遍历
循环双链表遍历
题目描述
已知以下程序:
#include <bits/stdc++.h>
using namespace std;
struct Node {
int val;
Node *nxt, *pre;
};
Node *head;
int tot;
// 已包含 insertNode 函数和 insertVal 函数,本题省略
// ...
// 请在此处实现 output 函数
// ...
int main() {
head = new Node;
head->nxt = head;
head->pre = head;
int n;
cin >> n;
int cnt = 0;
for (int i = 1; i <= n; i++) {
int op, v;
cin >> op;
if (op == 1) {
cin >> v;
insertVal(head, v);
cnt++;
}
else {
output();
}
}
Node *t = head->nxt;
for (int i = 1; i <= cnt; i++) {
Node *q = t->nxt;
delete t;
t = q;
}
delete head;
return 0;
}
程序的作用是:
- 进行 次操作,操作分为两种:
1 v:在链表头部插入一个值v。2:正序遍历链表,输出所有节点的数据域。
关于 insertNode 函数和 insertVal 函数:
- 此题的测试程序中没有提供这两个函数,如果需要使用可以去其他题目复制。
你的任务是实现 output 函数:
- 正序遍历链表,输出所有节点的数据域。
题型说明
解题时可以把题目提供的程序复制到编译器中,编写对应所需的函数,测试通过后只需要提交所需的函数,如果提交完整程序反而会 WA。
格式要求
输入格式
第一行输入一个整数 。
接下来 行,每行先输入一个整数 1 或 2,代表操作类型,如果是操作 1,则会再输入一个整数 。
输出格式
输出若干行,每行若干个整数,代表操作 2 时正序遍历链表时输出的所有节点的数据域。
样例
5
1 2
1 7
2
1 5
2
7 2
5 7 2