1075 链表元素分类

在这里插入图片描述
在这里插入图片描述
思路分析:本题难度一般,之所以写出来是想分享一个应试技巧:在最后的结果中,看似是前驱后继紧紧联系在一起的,其实在输出过程中,完全不必拘泥于这一点,专门修改指针甚至构建双向链表,只需要在输出的时候做一些简单的修改就好了。代码比较简单,注释比较详细,具体步骤就不写了。

在非第一行时,每一行只输出addres和data;输出下一行时用当前的addres补上上一行没打印的next并换行,然后再输出本行的addres和data,如此循环下去。

最后一个测试点因为PAT系统问题有可能过不去,多试几次就好了O(∩_∩)O

示例代码:

#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
int main(){
	int add1,n,k;
	cin>>add1>>n>>k;
	vector<vector<int>> link(100001,vector<int>(2));//二维数组 第一个为数据域 第二个为next域
	for(int i = 0; i < n; i++){
		int add,data,next = -1;//空指针用-1表示
		cin>>add>>data>>next;
		link[add][0] = data;
		link[add][1] = next;
	}
	vector<vector<int>> lib(3);//小于0、区间、大于0的部分的节点地址
	while(add1 != -1){
		if(link[add1][0] < 0){//数据域小于0
			lib[0].push_back(add1);//存储节点
		}else if(link[add1][0] >= 0 && link[add1][0] <= k){
			lib[1].push_back(add1);
		}else{
			lib[2].push_back(add1);
		}
		add1 = link[add1][1];
	}
	bool isfirst = true;
	for(int i = 0; i < 3; i++){
		for(int j = 0; j < lib[i].size(); j++){
			if(!isfirst) 
				cout<<setw(5)<<setfill('0')<<lib[i][j]<<endl;//残余在上一行的next
			cout<<setw(5)<<setfill('0')<<lib[i][j];
			cout<<" "<<link[lib[i][j]][0]<<" ";
			isfirst = false;
		}
	}
	cout<<-1<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值