求助:4AC 4WA 2TLE
  • 板块B3631 单向链表
  • 楼主F1NE
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/27 11:37
  • 上次更新2023/11/27 17:01:13
查看原帖
求助:4AC 4WA 2TLE
1163927
F1NE楼主2023/11/27 11:37
#include<bits/stdc++.h>
using namespace std;
long long res[100005];//储存结果的数组
struct node{//定义单向链表
	long long val;//节点储值位
	node *next;//下一节点的指针
}*head/*头节点指针*/,
 *p/*节点指针(虚拟节点)*/,
 *r/*末节点*/;
void posi(long long x){//p移动到数字在链表中位置的定位函数
	p=head;//从头开始
	while((p->val!=x/*找到对应值为止*/)
		&&(p->next!=NULL/*轮到最后为止*/)){
		p=p->next;//指针往下一位
	}
}
void cutin(long long x){//插入到后一位的函数
	posi(x);//通过函数让p移动到对应位置
	if(p->next==NULL){//若元素后无节点
		p=new node,//让p指向新节点
		p->next=NULL,//让新节点下一位为NULL
		scanf("%lld",&p->val),//给新节点储值位赋值
		r->next=p,//让原来的末节点指向新节点
		r=p;//让r指向新节点
	}else{//若有节点
		node *n=new node;//申请一个新节点指针
		n->next=p->next;//让新节点指向下一位
		scanf("%lld",&n->val);//节点赋值
		p->next=n;//让节点指向新节点
	}
}
int find(int x){//查找函数
	posi(x);//同上
	if(p->next!=NULL){//元素后若有元素
		return p->next->val;//返回后一个元素
	}
	return 0;//若后面没有元素直接返回0
}
void del(long long x){//删除函数
	posi(x);//同上
	if(p->next!=NULL){//若元素后有元素
		node *s;//新建节点
		s=p->next,//新节点指向要删除的元素
		p->next=p->next->next;//元素跳过下一个元素指向下下个元素(或者NULL)
		free(s);//释放内存
	}
}
int main()//主函数用于分类
{
	memset(res,-1,sizeof(res));//初始化防0数据导致报错
	head=new node,//头节点申请空间
	head->val=1,head->next=NULL,//初始化头节点
	r=head;//尾节点指向头节点
	int n/*操作数*/,op/*操作*/;
	long long x;//元素
	scanf("%d",&n);//输入操作数
	for(int i=0;i<n;i++){//执行n次
		scanf("%d",&op);//输入操作
		switch (op) {//用选择结构分类
			case 1:
				scanf("%lld",&x);//输入元素
				cutin(x);
				break;
			case 2:
				scanf("%lld",&x);//同上
				res[i]=find(x);//将查询的数据储存在数组内
				break;
			case 3:
				scanf("%lld",&x);
				del(x);
				break;
		}
	}
	for(int i=0;i<n;i++){//以下用于输出
		if(res[i]==-1){
			continue;
		}else{
			printf("%lld\n",res[i]);
		}
	}
	return 0;
}


2023/11/27 11:37
加载中...