使用链表,为了降低时间复杂度,还搞了一个指针数组来存各个节点的地址,目测时间复杂度应该是O(n)了,可惜还是TLE,不知道怎么办
代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int rank;
struct node *prior;
struct node *next;
}linknode,*linklist;
linklist head,rear;
linklist *array;
void creatlist(linklist head,int i)
{
int k,p;
linklist pointer,find,find_prior,find_next;
scanf("%d %d",&k,&p);
pointer=(linklist)malloc(sizeof(linknode));
pointer->rank=i;
find=head->next;
while(find->rank!=k)
find=find->next;
if(p==0)
{
find_prior=find->prior;
find->prior=pointer;
pointer->next=find;
find_prior->next=pointer;
pointer->prior=find_prior;
}
else
{
find_next=find->next;
find->next=pointer;
pointer->prior=find;
find_next->prior=pointer;
pointer->next=find_next;
}
array[pointer->rank]=pointer;
}
void removenode(linklist head)
{
int x,delta;
linklist find,find_prior,find_next;
scanf("%d",&x);
find=array[x];
if(find->next!=NULL&&find->prior!=NULL)
{
find_prior=find->prior;
find_next=find->next;
find_prior->next=find_next;
find_next->prior=find_prior;
find->next=NULL;
find->prior=NULL;
}
}
int main()
{
int n,m;
int i;
scanf("%d",&n);
array=(linklist *)calloc(n+1,sizeof(linklist));
head=(linklist)malloc(sizeof(linknode));
rear=(linklist)malloc(sizeof(linknode));
linklist pointer0=(linklist)malloc(sizeof(linknode));
head->next=pointer0;
rear->prior=pointer0;
pointer0->rank=1;
pointer0->prior=head;
pointer0->next=rear;
array[1]=pointer0;
for(i=2;i<=n;i++)
creatlist(head,i);
scanf("%d",&m);
for(i=1;i<=m;i++)
removenode(head);
pointer0=head->next;
while(pointer0!=rear)
{
printf("%d",pointer0->rank);
if(pointer0->next!=rear)
printf(" ");
pointer0=pointer0->next;
}
printf("\n");
return 0;
}
向大佬们求助