#6016. 循环双链表头插法

循环双链表头插法

题目描述

已知以下程序:

#include <bits/stdc++.h>
using namespace std;
struct Node {
	int val;
	Node *nxt, *pre;
}; 
Node *head;
int tot;
// 可以使用 insertNode 函数和 insertVal 函数,本题省略
// ... 
int main() {
	// 初始化头节点 
	head = new Node;
	head->nxt = head;
	head->pre = head;
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int v;
		cin >> v;
		// 请在此处补充头插法的代码 
		// ... 
	} 
	// 正序输出所有节点的数据域 
	Node *t = head->nxt;
	for (int i = 1; i <= n; i++) {
		cout << t->val << " ";
		t = t->nxt; 
	}
	t = head->nxt; 
	for (int i = 1; i <= n; i++) {
		Node *q = t->nxt;
		delete t;
		t = q;
	}
	delete head;
	return 0;
}

程序的作用是:

  • 输入 nn 个正整数 v,使用头插法把 v 插入到链表中。
  • 最后再正序输出所有节点的数据域。

关于 insertNode 函数和 insertVal 函数:

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

你的任务是:

  • 补充头插法缺失的代码。

题型说明

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

格式要求

输入格式

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

接下来一行输入 nn 个不超过 100100 的正整数。

输出格式

输出 nn 个整数。

样例

5
1 2 3 4 5
5 4 3 2 1