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

程序的作用是:

  • 进行 nn 次操作,操作分为两种:
    • 1 v:在链表头部插入一个值 v
    • 2:正序遍历链表,输出所有节点的数据域。

关于 insertNode 函数和 insertVal 函数:

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

你的任务是实现 output 函数:

  • 正序遍历链表,输出所有节点的数据域。

题型说明

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

格式要求

输入格式

第一行输入一个整数 n(1n100)n(1 \leq n \leq 100)

接下来 nn 行,每行先输入一个整数 12,代表操作类型,如果是操作 1,则会再输入一个整数 v(1v100)v(1 \leq v \leq 100)

输出格式

输出若干行,每行若干个整数,代表操作 2 时正序遍历链表时输出的所有节点的数据域。

样例

5
1 2
1 7
2
1 5
2
7 2
5 7 2