您的位置:首页 > 其它

1133 Splitting A Linked List (25分)

2020-02-12 17:15 67 查看

Given a singly linked list, you are supposed to rearrange its elements so that all the negative values appear before all of the non-negatives, and all the values in [0, K] appear before all those greater than K. The order of the elements inside each class must not be changed. For example, given the list being 18→7→-4→0→5→-6→10→11→-2 and K being 10, you must output -4→-6→-2→7→0→5→10→18→11.

Input Specification:

Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤10​5​​) which is the total number of nodes, and a positive K (≤10​3​​). The address of a node is a 5-digit nonnegative integer, and NULL is represented by −1.

Then N lines follow, each describes a node in the format:

[code]Address Data Next

where 

Address
 is the position of the node, 
Data
 is an integer in [−10​5​​,10​5​​], and 
Next
 is the position of the next node. It is guaranteed that the list is not empty.

Output Specification:

For each case, output in order (from beginning to the end of the list) the resulting linked list. Each node occupies a line, and is printed in the same format as in the input.

Sample Input:

[code]00100 9 10
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218

Sample Output:

[code]33218 -4 68237
68237 -6 48652
48652 -2 12309
12309 7 00000
00000 0 99999
99999 5 23333
23333 10 00100
00100 18 27777
27777 11 -1

作者: CHEN, Yue

单位: 浙江大学

时间限制: 400 ms

内存限制: 64 MB

代码长度限制: 16 KB

编译器 (31)

[code]#include <iostream>
#include <stdio.h>
#include <vector>
#include <map>

using namespace std;

struct node
{
int address;
int data;
int next;
};

int main()
{
int saddress,n,k;
map<int,node> mp;
vector<node> L,SL;
scanf("%d %d %d",&saddress,&n,&k);
for(int i=0; i<n; i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
mp[a]= {a,b,c};
}
int t=saddress;
while(t!=-1)
{
L.push_back(mp[t]);
t=mp[t].next;
}
for(int i=0; i<L.size(); i++)
if(L[i].data<0)SL.push_back(L[i]);
for(int i=0; i<L.size(); i++)
if(L[i].data<=k&&L[i].data>=0)SL.push_back(L[i]);
for(int i=0; i<L.size(); i++)
if(L[i].data>k)SL.push_back(L[i]);
for(int i=0; i<L.size(); i++)
if(i<SL.size()-1)
printf("%05d %d %05d\n",SL[i].address,SL[i].data,SL[i+1].address);
else
printf("%05d %d %d\n",SL[i].address,SL[i].data,-1);

return 0;
}

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
站内首发文章 青花和韵 发布了34 篇原创文章 · 获赞 2 · 访问量 1310 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: