社区讨论

80分TLE

B3631单向链表参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m25i65v4
此快照首次捕获于
2024/10/12 09:53
去年
此快照最后确认于
2025/11/04 17:24
4 个月前
查看原帖
C
#include<stdio.h>
#include<stdlib.h>
int a[100005];
int b[100005];
typedef struct map
{
	int data;
	struct map* next;
}map;
void Initmap(map* head)
{
	head->data = 1;
	head->next = NULL;
}
//创建节点

map* CreateNewNode(int x)
{
	map* NewNode = (map*)malloc(sizeof(map));
	NewNode->data = x;
	NewNode->next = NULL;
	return NewNode;
}
//查询指定值节点
map* Search(int x, map* head)
{
	map* cur = head;
	while (cur != NULL)
	{
		if (cur->data == x)
		{
			return cur;
		}
		cur = cur->next;
	}
	return NULL;
}
//插在指定节点后
void PushMaptail(map* head,int x,int y)
{
	map* cur = Search(x, head);
	if (cur->next == NULL)
	{
		map* NewNode = CreateNewNode(y);
		cur->next = NewNode;
		return;
	}
	else
	{
		map* prev = cur->next;
		map* NewNode = CreateNewNode(y);
		cur->next = NewNode;
		NewNode->next = prev;
	}
	
}


//查找节点后位置
int Find(int node,map*head)
{
	map* cur = Search(node, head);
	if(cur->next!=NULL)
	{
		cur = cur->next;
		return cur->data;
	}
	else
	{
		return 0;
	}
}

//删除指定位置后元素
void PopMap(int x, map* head)
{
	map* cur = Search(x, head);
	if (cur->next == NULL)
	{
		printf("无可删元素");
		return;
	}
	map* curr = cur->next;
	cur->next = curr->next;
	free(curr);
}



int main()
{
	map* ahead = (map*)malloc(sizeof(map));
	Initmap(ahead);
	int n,i=1,x,y,tb=0;
	scanf("%d", &n);
	do
	{
		scanf("%d", &a[i]);
		switch(a[i])
		{
		case 1:
		{
			scanf("%d%d", &x, &y);
			PushMaptail(ahead, x, y);
			break;
		}
		case 2:
		{
			scanf("%d", &x);
			b[tb++] = Find(x, ahead);
			break;
		}
		case 3:
		{
			scanf("%d", &x);
			PopMap(x, ahead);
			break;
		}
		default:
		{
			printf("输入错误");
		}
		}
		i++;
	} while (i <= n);
	for (int j = 0; j < tb; j++)
	{
		printf("%d\n", b[j]);
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...