1. 原题: https://www.patest.cn/contests/pat-a-practise/1133
2. 思路:
题意:链表处理题
将一杂乱的链表按照一定格式(负的在前,大于给定值的在后)重新排列。
思路:
先把每个结点存储在数组里,
然后遍历3次,存入vector里,最后输出即可。
将一杂乱的链表按照一定格式(负的在前,大于给定值的在后)重新排列。
思路:
先把每个结点存储在数组里,
然后遍历3次,存入vector里,最后输出即可。
已AC
3. 源码
#include <iostream>
#include <vector>
using namespace std;
struct Node
{
int local;
int data;
int next;
};
Node dt[100000];
int main()
{
//freopen("in.txt", "r", stdin);
int N, head, K, tmp;
vector<Node> re;
scanf("%d %d %d", &head, &N, &K);
for (int i = 0; i < N; i++)
{
scanf("%d", &tmp);
dt[tmp].local = tmp;
scanf("%d %d", &dt[tmp].data, &dt[tmp].next);
}
int adr = head;
while (1) //***找出小于0的
{
if (adr == -1)
break;
if (dt[adr].data < 0)
re.push_back(dt[adr]);
adr = dt[adr].next;
}
adr = head;
while (1)
{
if (adr == -1)
break;
if (dt[adr].data > -1 && dt[adr].data < (K+1))
re.push_back(dt[adr]);
adr = dt[adr].next;
}
adr = head;
while (1) //***找出大于K的
{
if (adr == -1)
break;
if (dt[adr].data > K)
re.push_back(dt[adr]);
adr = dt[adr].next;
}
int size = re.size();
for (int i = 0; i < size-1; i++)
{
printf("%05d %d %05d\n", re[i].local, re[i].data, re[i+1].local);
}
printf("%05d %d -1\n", re[size-1].local, re[size-1].data);
return 0;
}