PAT乙级1075 链表元素分类 (25 分)思路

https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880
1.先用个数组把元素装起来
2.从单链表头开始 遍历元素 分成3组
1)负值
2)小于K
3)大于K
3.然后三个组顺序遍历输出就完事了

#include <iostream>
#include <vector>
using namespace std;

struct node{
	int add, data, next;
}; 

vector<node> v1, v2, v3;
node N[100010]; 

int main(){
	int S_add, n, k, sub1 = 0, sub2 = 0, sub3 = 0;
	cin >> S_add >> n >> k;
	for(int i = 0; i < n; i++){
		int tmp1, tmp2, tmp3;
		cin >> tmp1 >> tmp2 >> tmp3;
		N[tmp1].add = tmp1;
		N[tmp1].data = tmp2;
		N[tmp1].next = tmp3;
	}
	//for(int i = 0; i < n; i++){
	while(S_add != -1){
		int tmp1, tmp2, tmp3;
		tmp1 = N[S_add].add;
		tmp2 = N[S_add].data;
		tmp3 = N[S_add].next;
	//	cin >> tmp1 >> tmp2 >> tmp3;
		if(tmp2 < 0){
			node temp;
			temp.add = tmp1;
			temp.data = tmp2;
			temp.next = tmp3;
			v1.push_back(temp);
		}
		else if(tmp2 <= k){
			node temp;
			temp.add = tmp1;
			temp.data = tmp2;
			temp.next = tmp3;
			v2.push_back(temp);
		}
		else{
			node temp;
			temp.add = tmp1;
			temp.data = tmp2;
			temp.next = tmp3;
			v3.push_back(temp);
		}
		S_add = N[S_add].next;
	}
	int n2 = v2.size(), n3 = v3.size();
	for(int i = 0; i < n2; i++)
		v1.push_back(v2[i]);
	for(int i = 0; i < n3; i++)
		v1.push_back(v3[i]);
	for(int i = 0; i < v1.size()-1; i++){
		printf("%05d %d %05d\n", v1[i].add, v1[i].data, v1[i+1].add);
	}
	printf("%05d %d -1", v1[v1.size()-1].add, v1[v1.size()-1].data);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值