其他分享
首页 > 其他分享> > PAT(Advanced Level)A1133. Splitting A Linked List

PAT(Advanced Level)A1133. Splitting A Linked List

作者:互联网

题意

要让链表里的所有负数的结点排在非负数的前面,以及让所有的[0, K]的数字放在(k, ∞)的前面,而且要保持相对顺序不变。保证链表不为空

思路

代码

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <cmath>
using namespace std;
struct node {
    int address;
    int data;
    int next;
}linked_list[100100];
int main() {
    int st, N, K;
    scanf("%d %d %d", &st, &N, &K);
    int ads, val, next;
    for(int i = 0; i < N; i++) {
        scanf("%d %d %d", &ads, &val, &next);
        linked_list[ads] = {ads, val, next};
    }
    // 存放最后结果
    vector<node> ans;
    
    // 找<0的数字
    int cur = st;
    while(cur != -1) {
        if(linked_list[cur].data < 0) {
            ans.emplace_back(node{linked_list[cur].address, linked_list[cur].data, linked_list[cur].next});
        }
        cur = linked_list[cur].next;
    }
    
    // 找[0, K]的数字
    cur = st;
    while(cur != -1) {
        if(linked_list[cur].data >= 0 && linked_list[cur].data <= K) {
            ans.emplace_back(node{linked_list[cur].address, linked_list[cur].data, linked_list[cur].next});
        }
        cur = linked_list[cur].next;
    }
    
    // 找剩下的数字
    cur = st;
    while(cur != -1) {
        if(linked_list[cur].data > K)
        ans.emplace_back(node{linked_list[cur].address, linked_list[cur].data, linked_list[cur].next});
        cur = linked_list[cur].next;
    }
    for(int i = 0; i < ans.size() - 1; i++) {
        printf("%05d %d %05d\n", ans[i].address, ans[i].data, ans[i + 1].address);
    }
    printf("%05d %d %d", ans.back().address, ans.back().data, -1);
    return 0;
}

P

标签:A1133,cur,Level,int,list,List,ans,data,linked
来源: https://www.cnblogs.com/MartinLwx/p/14526207.html