/*************************
题意:
拆分1个链表
把链表划分成 <0 , 0-k , 大于k三个链表(同一链表内相对顺序不变)
并对其进行重新连接。
并输出。
************************/
/***********************
解题思路:
搞3个vector,然后收集对应的节点
最后再合并,输出,即可。
*************************/
/***********************
注意
存无向图时,一定不要遗漏双向的存储!!
*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
#include<map>
#include<set>
#include<unordered_map>
using namespace std;
#define M 100005
#define INF 0x7ffffff
struct Node{
int addr;
int Next;
int data;
};
Node node[M];
int main(){
int n, i, m;
int head,k;
cin>>head>>n>>k;
int s,e,data;
while(n--){
scanf("%d%d%d",&s ,&data, &e);
node[s].addr = s;
node[s].Next = e;
node[s].data = data;
}
vector<Node> v1,v2,v3;
int p = head;
while(p != -1){
if(node[p].data <0 )
v1.push_back(node[p]);
else if(node[p].data <= k)
v2.push_back(node[p]);
else v3.push_back(node[p]);
p = node[p].Next;
}
v1.insert(v1.end(),v2.begin(),v2.end());
v1.insert(v1.end(),v3.begin(),v3.end());
for(i=0;i<v1.size();i++){
if(i != v1.size()-1)
printf("%05d %d %05d\n",v1[i].addr,v1[i].data,v1[i+1].addr);
else printf("%05d %d -1\n",v1[i].addr,v1[i].data);
}
return 0;
}
PAT 1133. Splitting A Linked List (25) 链表的拆分和合并
最新推荐文章于 2020-09-01 00:29:49 发布