您的位置:首页 > 其它

1133. Splitting A Linked List (25)[链表处理]

2017-11-10 17:33 411 查看

1. 原题: https://www.patest.cn/contests/pat-a-practise/1133

2. 思路:

题意:链表处理题

将一杂乱的链表按照一定格式(负的在前,大于给定值的在后)重新排列。

思路:

先把每个结点存储在数组里,

然后遍历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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT 甲级 链表