PAT甲级 1052 Linked List Sorting 链表排序

PAT甲级 1052 Linked List Sorting 链表排序
PAT甲级 1052 Linked List Sorting 链表排序

Solution:

这道题我竟然真的用链表+指针过了。。。。。真是模拟了链表。。没谁了
不熟悉指针的最好别借鉴了。。不说了,代码如下:

//链表排序
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;

int n,h;
int num=1;

struct node_x{
    int key;//键值
    int address;//当前结点的地址
    int next;
}a[100005],b[100005];

bool flag[100005];

struct node{
    int key;
    node *next;
    int address;
    int ne;
};

node *head,*p;

void init(){//初始化
    head=new node;
    p=new node;
    p=head;
    head->next=NULL;
    head->key=0;
    for(int i=0;i<num;i++){//插入
        node *x=new node;
        p->next=x;
        p=x;
        x->key=b[i].key;
        x->address=b[i].address;
        x->ne=b[i].next;
        x->next=NULL;
    }
}

bool cmp(node_x a,node_x b){
    return a.key<b.key;
}

void traversal(){
    node *q=new node;
    q=head->next;
    printf("%d %05d\n",num,q->address);
    while(q!=NULL&&q->next!=NULL){
        printf("%05d %d %05d\n",q->address,q->key,q->next->address);
        q=q->next;
    }
    printf("%05d %d -1",q->address,q->key);
}

int main(){
    cin>>n>>h;
    if(h==-1){
        cout<<"0 -1";
        return 0;
    }

    for(int i=0;i<100005;i++){
        flag[i]=false;
    }

    int pos;//找到头结点位置
    int address;
    bool f=false;
    for(int i=0;i<n;i++){
        cin>>address;
        cin>>a[address].key>>a[address].next;
        a[address].address=address;
        flag[address]=true;
        if(address==h){
            f=true;
            pos=address;
        }
    }
    if(!f){
        cout<<"0 -1";
        return 0;
    }
    b[0].address=a[pos].address;
    b[0].key=a[pos].key;
    b[0].next=a[pos].next;
    int nn=n;
    while(nn--){
        if(flag[a[pos].next]){
            int temp=a[pos].next;
            b[num].address=temp;
            b[num].key=a[temp].key;
            b[num].next=a[temp].next;
            num++;
            pos=temp;
        }
    }

    sort(b,b+num,cmp);
    init();
    traversal();//遍历链表
    return 0;
}

上一篇:爬虫基础


下一篇:1052 卖个萌 (20 分)