PAT甲级 1133 Splitting A Linked List (25分) C++
2020-06-24 04:26
89 查看
1133 Splitting A Linked List (25分)
题目大意:给定链表,把负数放在最前面,小于等于k的数放中间,大于k的放最后(相同条件的数按照链表原来的相对顺序排列)
tips:
- 使用map存放node的address,方便把结点串起来(寻找下一结点位置);
- 把负数放到vector的前面,大于k的放到vector后面(也可以用一个独立的vector存放)(倒序输出),把中间部分的数放到另一个vector中,最后按照一定顺序输出所有数。
#include<iostream> //输入输出流头文件 #include<map> //map映射容器 #include<vector> //变长数组容器 using namespace std; //标准命名空间 int n,k,e,pre=0; string add,nextadd,s; struct node{ int elem; string add,nextadd; node(){} node(string add,int elem,string nextadd):add(add),elem(elem),nextadd(nextadd){} }; int main(){ //主函数 cin>>s>>n>>k; int last=n-1; map<string,node> l; node startnode; vector<node> ordernode(n),innode; for(int i=0;i<n;i++){ cin>>add>>e>>nextadd; l[add]=(node(add,e,nextadd)); if(add==s) startnode=(node(add,e,nextadd)); } while(1){ if( startnode.elem<0) ordernode[pre++]=startnode; else if(startnode.elem>k) ordernode[last--]=startnode; else innode.push_back(startnode); if(startnode.nextadd=="-1") break; startnode=l[startnode.nextadd]; } for(int i=0;i<pre;i++) printf("%s %d %s\n",&ordernode[i].add[0],ordernode[i].elem,(i+1<pre?&ordernode[i+1].add[0]:(innode.size()>0?&innode[0].add[0]:(last==n-1?"-1":&ordernode[n-1].add[0])))); for(int i=0;i<innode.size();i++) printf("%s %d %s\n",&innode[i].add[0],innode[i].elem,i+1<innode.size()?&innode[i+1].add[0]:(last==n-1?"-1":&ordernode[n-1].add[0])); for(int i=n-1;i>last;i--)printf("%s %d %s\n",&ordernode[i].add[0],ordernode[i].elem,i-1>last?&ordernode[i-1].add[0]:"-1"); return 0; //返回0,如果不返回0,PAT会报错 }
相关文章推荐
- 1133. Splitting A Linked List (25)-PAT甲级真题
- PAT甲级——1133 Splitting A Linked List (25 分)
- PAT 甲级 1133. Splitting A Linked List (25)
- PAT 甲级 1133 Splitting A Linked List
- PAT甲级 1133. Splitting A Linked List (25)
- PAT甲级 1133 - Splitting A Linked List
- 1133 Splitting A Linked List (25分)
- PAT 1133 Splitting A Linked List(25 分)(结构体+链表)
- PAT (Advanced Level)-1133 Splitting A Linked List
- PAT 1133. Splitting A Linked List (25) 链表的拆分和合并
- PAT-1133 Splitting A Linked List(链表分解)
- PAT (Advanced Level) Practise 1133 Splitting A Linked List (25)
- PAT甲级题解-1097. Deduplication on a Linked List (25)-链表的删除操作
- PAT甲级——1097 Deduplication on a Linked List (链表)
- C++ PAT甲级 1010 Radix (25分)(一个超时,24分)
- 1097. Deduplication on a Linked List (25)-PAT甲级真题
- 1074. Reversing Linked List (25)-PAT甲级真题
- 1133. Splitting A Linked List (25)
- 1133 Splitting A Linked List(25 分)
- PAT 甲级 1097. Deduplication on a Linked List (25)