• 1025 反转链表 (25 分)


    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。

    输入格式:
    每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤10
    5
    )、以及正整数 K (≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。

    接下来有 N 行,每行格式为:

    Address Data Next
    其中 Address 是结点地址,Data 是该结点保存的整数数据,Next 是下一结点的地址。

    输出格式:
    对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

    输入样例:
    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218

    结尾无空行
    输出样例:
    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1

    原来自己写的代码部分未通过,copy消化了一下

    #include<iostream>
    #include<algorithm>
    #include<iomanip>
    using namespace std;
    
    int main()
    {
       int head,k,n,temp;
        cin>>head>>n>>k;
        int data[100005],next[100005],list[100005];//类似桶排序地址变成了数组下标
        for(int i=0;i<n;i++)
        {
            cin>>temp;
            cin>>data[temp]>>next[temp];
        }
        int s=0;//节点不在链表中的情况?
        while(head!=-1)//花费时间有点长..
        {
            list[s++] = head;//按地址排序好
            head = next[head];
        }
        for(int i=0;i<(s-s%k);i+=k)//多余不够的就不管了
        {
            reverse(begin(list)+i,begin(list)+i+k);
        }
        for(int i=0;i<s-1;i++)
        {
            cout<<setfill('0')<<setw(5)<<list[i];
                cout<<" "<<data[list[i]]<<" ";
            cout<<setfill('0')<<setw(5)<<list[i+1]<<endl;
        }
        cout<<setfill('0')<<setw(5)<<list[s-1];
              
        
        cout<<" "<<data[list[s-1]]<<" -1"<<endl;
    }
    
    1. 小题目常用的技巧 分成多个大数组放 不用创建结构体

    list是按链表地址的顺序派好 依次存入
    data和next以地址为数组下标便可获取数据

    1. 除去多余 开始反转

    利用reverse(首地址,尾地址)可以是普通数组 也可以是容器迭代器

    1. 格式化输出

    #include 的setw与setfill控制小数点前 以及最后的空格/空行

  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    107. Binary Tree Level Order Traversal II
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    104. Maximum Depth of Binary Tree
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    系统和进程相关信息
    文件I/0缓冲
    系统编程概念(文件系统mount等函数的使用)
  • 原文地址:https://www.cnblogs.com/most-silence/p/15495370.html
Copyright © 2020-2023  润新知