• PAT (Advanced Level) Practice 1133 Splitting A Linked List (25分) (静态链表的遍历)


    1.题目

    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

    2.代码

    #include<iostream>
    #include<vector>
    using namespace std;
    struct node
    {
    	int address;
    	int data;
    	int next;
    }list[100001];
    
    int main()
    {
    	int head, n, k;
    	int temp;
    	cin >> head >> n >> k;
    	int headcpoy = head;
    	for (int i = 0; i < n; i++)
    	{
    		scanf("%d", &temp);
    		scanf(" %d %d", &list[temp].data, &list[temp].next);
    		list[temp].address = temp;
    	}
    	int count = 0; int count1 = 0, count2 = 0, count3 = 0;
    	vector<node>out;
    	while (1)
    	{
    		if (list[headcpoy].data < 0)out.push_back(list[headcpoy]);
    		headcpoy = list[headcpoy].next;
    		if (headcpoy == -1)break;
    	}
    	headcpoy = head;
    	while (1)
    	{
    		if (list[headcpoy].data >= 0&& list[headcpoy].data<=k)out.push_back(list[headcpoy]);
    		headcpoy = list[headcpoy].next;
    		if (headcpoy == -1)break;
    	}
    	headcpoy = head;
    	while (1)
    	{
    		if (list[headcpoy].data>k)out.push_back(list[headcpoy]);
    		headcpoy = list[headcpoy].next;
    		if (headcpoy == -1)break;
    	}
    	for (int i = 0; i < out.size() - 1; i++)
    		printf("%05d %d %05d
    ", out[i].address, out[i].data, out[i + 1].address);
    	printf("%05d %d -1
    ", out[out.size() - 1].address, out[out.size() - 1].data);
    
    }
  • 相关阅读:
    .NET HttpWebRequest应用
    .NET 文件上传和文件接收
    小程序报错:对应的服务器 TLS 为 TLS 1.0 ,小程序要求的 TLS 版本必须大于等于 1.2
    发布微信小程序体验版
    .NET 通过entity framework报数据库连接错误:ORA-01017: invalid username/password; logon denied
    将Oracle 12c的某用户数据迁移至OracleXE的用户
    C# Oracle 时间字符串转时间类型
    在.NET中调用Java的类
    Oracle 取前几条记录
    oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12788874.html
Copyright © 2020-2023  润新知