1075 链表元素分类

#include<bits/stdc++.h>
#include<vector>
#include<map>
using namespace std;
struct node
{
    int data;
    int next;
}a[100005];
vector<int>v[3];
int main()
{
    int start,n,k,temp;
    cin>>start>>n>>k;
    for(int i=0;i<n;i++)
    {
        //cin>>temp;
        //cin>>a[temp].data>>a[temp].next;
        scanf("%d",&temp);
        scanf("%d%d",&a[temp].data,&a[temp].next);
    }//放入地址 根据地址去找data 和 next 
    int x=start;
    while(x!=-1)
    {
        int data=a[x].data;
        if(data<0) v[0].push_back(x);
        else if(data>=0&&data<=k) v[1].push_back(x);
        else v[2].push_back(x);
        x=a[x].next;
    }
    bool p=0;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<v[i].size();j++)
        {
            if(!p) 
            {
                printf("%05d %d ",v[i][j],a[v[i][j]].data);
                p=1;
            }
            else
            {
                printf("%05d
%05d %d ",v[i][j],v[i][j],a[v[i][j]].data);
            }
        }
    }
    cout<<-1<<endl;
}
View Code

思路:1.结构体里面存data和next  根据每一个地址去找他的data和next.

2.按照输入顺序将地址分别放在三个数组里面,负数,正数到k,大于k三类

3.输出时直接输出v数组里面的地址和对应的data,不用管next,因为已经排序好了 下一个节点已经改变 不用管

原文地址:https://www.cnblogs.com/minqqq/p/12369179.html