Problem C.链表操作(2019网研院)

题目描述

一个初值为 1,2,3,4,…,n的n(0<n<=50)个节点的顺序链表,有以下3种操作方式:
1 移除节点值为x的节点
2 翻转链表,对调整个链表的顺序
3 查询链表值为x的节点所指的下一个节点的值

输入:

第一行输入T,表示数据的组数 每组第一行输入 n (表示节点数目) m (表示操作数目) 接下来m行分别输入 ope (操作方式) x (操作的节点值,操作方式为2时不会输入该值)

输出:

输出操作为3查询时,所查节点所指的下一个节点值,若没有查到或查到的节点为表尾 (没有下一节点),输出"NONE"

样例输入

1
6 6
3 6
1 2
3 1
2
1 5
3 6

样例输出

NONE
3
4
#include<bits/stdc++.h>
using namespace std;
int main() {
	int T;
	cin>>T;
	while(T--) {
		int n,m;
		int link[55];
		memset(link,0,sizeof(link));
		cin>>n>>m;
		for(int i=1; i<=n; i++) {
			link[i]=i;
		}
		while(m--) {
			int ope,x;
			cin>>ope;
			if(ope==1) {
				cin>>x;
				for(int i=1; i<=n; i++) {
					if(link[i]==x)
						link[i]=0;
				}
			}
			if(ope==2) {
				int tmp;
				for(int i=1,j=n; i<=n/2,j>n/2; i++,j--) {
					tmp=link[i];
					link[i]=link[j];
					link[j]=tmp;
				}
			}
			if(ope==3) {
				cin>>x;
				int flag=0;
				for(int i=1; i<=n; i++) {
					if(link[i]==x&&(i+1)<=n){
						for(int j=i+1;j<=n;j++){
							if(link[j]!=0){
								cout<<link[j]<<endl;
								flag=1;
								break;
							}
						}
					}
				}
				if(flag==0){
					cout<<"NONE"<<endl;
				}
			}
		}
	}
}
发布了71 篇原创文章 · 获赞 114 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/chaokudeztt/article/details/104840106