• 1133 Splitting A Linked List (25 分)


    1133 Splitting A Linked List (25 分)

    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 (105​​) which is the total number of nodes, and a positive K (103​​). 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 [105​​,105​​], 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<string>
    #include<vector>
    #include<string>
    #include<cstdio>
    #include<cmath>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    struct Node
    {
        int address;
        int data;
        int next;
    };
    
    Node node[10000010];
    int main()
    {
        int address,n,k;
        scanf("%d%d%d",&address,&n,&k);
        for(int i=0; i<n; i++)
        {
            Node temp;
            scanf("%d%d%d",&temp.address,&temp.data,&temp.next);
            node[temp.address]=temp;
        }
        vector<Node> v1,v2,v3;
        for(int i=address; i!=-1; i=node[i].next)
        {
            if(node[i].data<0)
                v1.push_back(node[i]);
            else if(node[i].data<=k)
                v2.push_back(node[i]);
            else
                v3.push_back(node[i]);
        }
        v1.insert(v1.end(),v2.begin(),v2.end());
        v1.insert(v1.end(),v3.begin(),v3.end());
        for(int i=1;i<v1.size();i++)
        {
            printf("%05d %d %05d
    ",v1[i-1].address,v1[i-1].data,v1[i].address);
            if(i==v1.size()-1)
                printf("%05d %d -1
    ",v1[i].address,v1[i].data);
        }
        if(v1.size()==1)
            printf("%05d %d -1
    ",v1[0].address,v1[0].data);
        return 0;
    }
     
  • 相关阅读:
    Android Studio如何设置代码自动提示
    Java中Map的用法详解
    Android 管理Activity中的fragments
    Android
    WebApp之Meta标签
    iOS中为网站添加图标到主屏幕以及增加启动画面
    HTML5添加 video 视频标签后仍然无法播放的解决方法 IIS添加MIEI类型
    WebApp之 apple-touch-icon
    Eclipse编辑器基本设置
    Redis监控方案
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10371349.html
Copyright © 2020-2023  润新知