1133 Splitting A Linked List (25)
Posted mr-stn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1133 Splitting A Linked List (25)相关的知识,希望对你有一定的参考价值。
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 (<=1000). 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:
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:
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:
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
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 struct node{ 5 int addr, val, next; 6 }; 7 8 int main(){ 9 int root, n, k, i; 10 cin>>root>>n>>k; 11 vector<node> v1, v2, v3; 12 vector<int> link(100000, -1), value(100000); 13 for(i=0; i<n; i++){ 14 int addr, val, next; 15 scanf("%d%d%d", &addr, &val, &next); 16 link[addr]=next; 17 value[addr]=val; 18 } 19 while(true){ 20 if(root==-1) break; 21 node nnode; nnode.addr=root; nnode.val=value[root]; 22 if(value[root]<0) v1.push_back(nnode); 23 else if(value[root]<=k) v2.push_back(nnode); 24 else v3.push_back(nnode); 25 root=link[root]; 26 } 27 for(i=0; i<v2.size(); i++) v1.push_back(v2[i]); 28 for(i=0; i<v3.size(); i++) v1.push_back(v3[i]); 29 for(i=0; i<v1.size()-1; i++)printf("%05d %d %05d ", v1[i].addr, v1[i].val, v1[i+1].addr); 30 printf("%05d %d %d ", v1[v1.size()-1].addr, v1[v1.size()-1].val, -1); 31 return 0; 32 }
以上是关于1133 Splitting A Linked List (25)的主要内容,如果未能解决你的问题,请参考以下文章
PAT1133:Splitting A Linked List
1133 Splitting A Linked List (25分)
PAT 1133 Splitting A Linked List
1133 Splitting A Linked List (25 分)难度: 一般 / 知识点: 链表模拟