求助大佬 345点 TLE C 语言
查看原帖
求助大佬 345点 TLE C 语言
573601
Keine_wie_du楼主2022/1/29 11:44

使用链表,为了降低时间复杂度,还搞了一个指针数组来存各个节点的地址,目测时间复杂度应该是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;
}

向大佬们求助

2022/1/29 11:44
加载中...