单链表
#include <bits/stdc++.h>
using namespace std;
struct node{
node* r;
int x;
};
int main()
{
int n;cin>>n;
node* root = new node;
node* now = root;
for(int i = 1 ; i <= 10;i++){
node* temp = new node;
temp -> x = i;
temp -> r = NULL;
now -> r = temp;
now = temp;
}
while(n--){
int xx;
cin>>xx;
now = root;
while(now->r->x!=xx){
now = now->r;
}
if(now == root){
now = root -> r;
while(now != NULL){
cout<<now->x<<" ";
now = now -> r;
}
cout<<endl;
continue;
}
node* c = new node;
c->x = xx;
c->r = root->r;
root->r = c;
if(now->r!=NULL)now->r = now -> r ->r;
now = root -> r;
while(now != NULL){
cout<<now->x<<" ";
now = now -> r;
}
cout<<endl;
}
return 0;
}
双向链表
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
node* l;
node* r;
};
int main(){
int n = 10 , t; cin >> t;
node* root = new node;
node* now = root;
now -> x = 1;
now -> l = NULL;
for(int i = 2 ; i <= n; i++){
node* temp = new node;
temp -> x = i;
temp -> l = now;
now -> r = temp;
now = temp;
}
now -> r = NULL;
while(t--){
int xx; cin >> xx;
now = root;
while(now -> x != xx){
now = now -> r;
}
if(now -> l != NULL) now -> l -> r = now -> r;
else{
while(now != NULL){
cout<<now->x<<" ";
now = now -> r;
}
cout<<endl;
continue;
}
if(now -> r != NULL) now -> r -> l = now -> l;
now -> r = root;
root-> l = now;
now -> l = NULL;
root = now;
while(now != NULL){
cout<<now->x<<" ";
now = now -> r;
}
cout<<endl;
}
}