• 1074 Reversing Linked List


    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.

    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 (≤) which is the total number of nodes, and a positive K (≤) which is the length of the sublist to be reversed. 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, and Next is the position of the next node.

    Output Specification:

    For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.

    Sample Input:

    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
    

    Sample Output:

    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1

    /*
        Name:
        Copyright:
        Author:  流照君
        Date: 2019/8/5 14:52:14
        Description:
    */
    #include <iostream>
    #include<string>
    #include <algorithm>
    #include <vector>
    using namespace std;
    const int inf=100100;
    int main(int argc, char** argv)
    {
        //freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
        int num=0,first,n,k,list[inf],add[inf],temp,next[inf];
        cin>>first>>n>>k;
        for(int i=1;i<=n;i++)
        {
        	cin>>temp;
        	cin>>add[temp]>>next[temp];
    	}
    	while(first!=-1)  //不是所有输入都是有用的 
    	{
    		list[num++]=first;
    		first=next[first];
    	}
    	for(int i=0;i<num-num%k;i=i+k)
    	reverse(begin(list)+i,begin(list)+i+k); //反转函数 
    	for(int i=0;i<num-1;i++)
    	printf("%05d %d %05d
    ",list[i],add[list[i]],list[i+1]);
    	printf("%05d %d -1", list[num - 1], add[list[num - 1]]);
        return 0;
    }
    

      特别说一下

    C++11引入了 begin 和 end 的函数,这两个函数与容器中的两个同名成员功能类似,不过这两个函数不是成员函数,而是含有参数的函数。

    用法说明:

    begin 返回首元素的地址,end 返回尾元素的下一个地址。

  • 相关阅读:
    拍照
    【HDU 4372】 Count the Buildings (第一类斯特林数)
    【HDU 5370】 Tree Maker(卡特兰数+dp)
    【HDU 4436】 str2int (广义SAM)
    【BZOJ 3926】 [Zjoi2015]诸神眷顾的幻想乡 (广义SAM)
    【HDU 5184】 Brackets (卡特兰数)
    【HDU 1133】 Buy the Ticket (卡特兰数)
    【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)
    【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)
    【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11398443.html
Copyright © 2020-2023  润新知