后面三个测试点都超时了,怎么稍微修改下解决
查看原帖
后面三个测试点都超时了,怎么稍微修改下解决
1432460
swllite楼主2024/11/9 15:32

#include<stdio.h> #include<stdlib.h> typedef struct link { int num; struct link* next; }LINK; LINK* InitLink(int n) { LINK* head = (LINK*)malloc(sizeof(LINK)); head->next = NULL; return head; } void EnLink(int n, LINK* head) { int num, dir; LINK* pr = NULL ,* p = NULL,newp = NULL; newp = (LINK)malloc(sizeof(LINK)); head->next = newp; newp->num = 1; newp->next = NULL;

for (int i = 2; i <= n; i++)
{
	p = head;
	scanf("%d %d", &num, &dir);
	newp = (LINK*)malloc(sizeof(LINK));
	newp->num = i;
	while (p->next != NULL)
	{
		pr = p;
		p = p->next;
		if (p->num == num)
		{
			if (dir)
			{
				pr = p;
				if (p->next == NULL)
				{
					p->next = newp;
					newp->next = NULL;
				}
			    else	
				{
					newp->next = pr->next;
					p->next = newp;
					
				}
			}
			else
			{
				pr->next = newp;
				newp->next = p;
			}
		}
	}
}

} void DeleteLink(int m,int n, LINK* head) { LINK* p = NULL; LINK* pr = NULL; int del; for (int i = 0; i < m; i++) { scanf("%d", &del); p = head; while (p->next!=NULL) { pr = p; p = p->next; if (p->num == del) { pr->next = pr->next->next; free(p); break; } } } } int main() { int n,m;//n为总人数 scanf("%d",&n); LINK* head = InitLink(n); EnLink(n, head); scanf("%d", &m); DeleteLink(m,n, head); LINK* p = head; do{ p = p->next; printf("%d ", p->num); } while (p->next != NULL); return 0; }``` #include<stdio.h> #include<stdlib.h> typedef struct link { int num; struct link* next; }LINK; LINK* InitLink(int n) { LINK* head = (LINK*)malloc(sizeof(LINK)); head->next = NULL; return head; } void EnLink(int n, LINK* head) { int num, dir; LINK* pr = NULL ,* p = NULL,newp = NULL; newp = (LINK)malloc(sizeof(LINK)); head->next = newp; newp->num = 1; newp->next = NULL;

for (int i = 2; i <= n; i++)
{
	p = head;
	scanf("%d %d", &num, &dir);
	newp = (LINK*)malloc(sizeof(LINK));
	newp->num = i;
	while (p->next != NULL)
	{
		pr = p;
		p = p->next;
		if (p->num == num)
		{
			if (dir)
			{
				pr = p;
				if (p->next == NULL)
				{
					p->next = newp;
					newp->next = NULL;
				}
			    else	
				{
					newp->next = pr->next;
					p->next = newp;
					
				}
			}
			else
			{
				pr->next = newp;
				newp->next = p;
			}
		}
	}
}

} void DeleteLink(int m,int n, LINK* head) { LINK* p = NULL; LINK* pr = NULL; int del; for (int i = 0; i < m; i++) { scanf("%d", &del); p = head; while (p->next!=NULL) { pr = p; p = p->next; if (p->num == del) { pr->next = pr->next->next; free(p); break; } } } } int main() { int n,m;//n为总人数 scanf("%d",&n); LINK* head = InitLink(n); EnLink(n, head); scanf("%d", &m); DeleteLink(m,n, head); LINK* p = head; do{ p = p->next; printf("%d ", p->num); } while (p->next != NULL); return 0; }

2024/11/9 15:32
加载中...