• PAT 1133 Splitting A Linked List


    Given a singly linked list, you are supposed to rearrange its elements so that all the negative values appear before all of the non-negatives, and all the values in [0, K] appear before all those greater than K. The order of the elements inside each class must not be changed. For example, given the list being 18→7→-4→0→5→-6→10→11→-2 and K being 10, you must output -4→-6→-2→7→0→5→10→18→11.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤10^​5​​ ) which is the total number of nodes, and a positive K (≤10^3 ). The address of a node is a 5-digit nonnegative integer, and NULL is represented by −1.

    Then N lines follow, each describes a node in the format:

    Address Data Next

    where Address is the position of the node, Data is an integer in [−10^​5​​ ,10^5 ], and Next is the position of the next node. It is guaranteed that the list is not empty.

    Output Specification:

    For each case, output in order (from beginning to the end of the list) the resulting linked list. Each node occupies a line, and is printed in the same format as in the input.

    Sample Input:

    00100 9 10
    23333 10 27777
    00000 0 99999
    00100 18 12309
    68237 -6 23333
    33218 -4 00000
    48652 -2 -1
    99999 5 68237
    27777 11 48652
    12309 7 33218

    Sample Output:

    33218 -4 68237
    68237 -6 48652
    48652 -2 12309
    12309 7 00000
    00000 0 99999
    99999 5 23333
    23333 10 00100
    00100 18 27777
    27777 11 -1

    #include<iostream> //偏简单, 看清题目
    #include<vector>
    using namespace std;
    struct node{
    	int val;
    	int next;
    };
    int main(){
    	int First, n, k, t=-1, cnt=0;
    	cin>>First>>n>>k;
    	vector<node> data(100000);
    	vector<int> negative, posl, posr, ans;
    	for(int i=0; i<n; i++){
    		int d, v, next;
    		cin>>d;
    		cin>>data[d].val>>data[d].next;
    	}
    	while(First!=-1){
    		if(data[First].val<0)
    			negative.push_back(First);
    		else if(data[First].val<=k)
    			posl.push_back(First);
    		else if(data[First].val>k)
    			posr.push_back(First);
    		First=data[First].next;
    	}
    	for(int i=0; i<negative.size(); i++)
    		ans.push_back(negative[i]);
        for(int i=0; i<posl.size(); i++)
    		ans.push_back(posl[i]);
    	for(int i=0; i<posr.size(); i++)
    		ans.push_back(posr[i]);
    	for(int i=0; i<ans.size(); i++)
    		if(i!=ans.size()-1)
    			printf("%05d %d %05d
    ", ans[i], data[ans[i]].val, ans[i+1]);
    		else
    			printf("%05d %d -1", ans[i], data[ans[i]].val);
    	return 0;
    } 
    
  • 相关阅读:
    Android 颜色配置表-颜色类
    Android模拟器——Genymotion
    Android-adb shell 读取手机系统文件
    android webview js交互 第一节 (java和js交互)
    Android源码目录结构详解(转载)
    BlockingQueue深入分析(转)
    RUDP之三 —— Virtual Connection over UDP
    RUDP之二 —— Sending and Receiving Packets
    OSS层基础:平台区分
    RUDP之一 —— UDP VS TCP
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/9506883.html
Copyright © 2020-2023  润新知