手搓双向链表全RE求调
  • 板块P1160 队列安排
  • 楼主Manor
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/7/21 14:20
  • 上次更新2025/7/21 18:43:39
查看原帖
手搓双向链表全RE求调
1246557
Manor楼主2025/7/21 14:20

rt,代码如下:

#include<bits/stdc++.h>
using namespace std;
struct Node{
	int val;
	Node *pre,*next;
	Node(){
		pre=nullptr;
		next=nullptr;
	}
}node[100005];
Node *p=node,*head=++p,*tail=head;
void push_front(int d){
	Node *np=++p;
	head->val=d;
	np->next=head;
	head->pre=np;
	head=np;
}
void push_back(int d){
	Node *np=++p;
	np->val=d;
	tail->next=np;
	np->pre=tail;
	tail=np;
}
void insert(Node *t,int d){
	Node *np=++p;
	np->val=d;
	t->pre->next=np;
	np->pre=t->pre;
	np->next=t;
	t->pre=np;
}
void erase(Node *t){
	if(t==tail){
		t->pre->next=nullptr;
		tail=t->pre;
	}
	else{
		t->pre->next=t->next;
		t->next->pre=t->pre;
	}
}
void show(){
	for(Node *i=head->next;i!=nullptr;i=i->next){
		cout<<i->val<<' ';
	}
	cout<<"\n";
}
int main(){
	int n,m;
	cin>>n;
	push_back(1);
	for(int i=2;i<=n;i++){
		int k,t;
		cin>>k>>t;
		Node *np=head;
		if(t==0){
			if(head->val==k) push_front(i);
			else{
				while(np->val!=k) np=np->next;
				insert(np,i);
			}
		}
		else{
			if(tail->val==k) push_back(i);
			else{
				while(np->pre->val!=k) np=np->next;
				insert(np,i);
			}
		}
		show();
	}
	cin>>m;
	for(int i=0;i<m;i++){
		int t;
		cin>>t;
		Node *np=head;
		while(np->val!=t && np!=tail) np=np->next;
		if(np->val==t) erase(np);
	}
	show();
	return 0;
}
2025/7/21 14:20
加载中...