• 反转链表 pta


    给定一个常数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(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。

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

    Address Data Next

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

     

    输出

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

    样例输入

     

    样例输出

    解题思路:刚开始题目理解错误了 并不是分2次考虑 而是一段k 一段k的考虑下去 直到结束  另外就是函数库的reverse的运用

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=100010;
     4 int pre[N],h;
     5 int last[N],j;
     6 int a,n,k,jishu,geshu;
     7 struct Node{
     8     int ad,date,next;
     9 }listt[N],*que[N];
    10 
    11 int main()
    12 {
    13     cin>>a>>n>>k;
    14     for(int i=1,d1,d2,d3;i<=n;i++){
    15         cin>>d1>>d2>>d3;
    16         listt[d1]={d1,d2,d3};
    17     }
    18     int head=a;
    19     while(head!=-1){
    20         que[++jishu]=&listt[head];
    21         head=listt[head].next;
    22     }
    23     if(que+1==&que[1]){
    24         cout << "xuhao" << endl;
    25     }
    26     for(int i=1;i<=jishu-k+1;i+=k){
    27         reverse(que+i,quei+k);   //reverse里面前面的地址是第一个地址,后面的地址是最后那个元素的后一个
    28     }
    29     for(int i=1;i<=jishu;i++){
    30         if(i==1) printf("%05d %d ",que[i]->ad,que[i]->date);
    31         else printf("%05d
    %05d %d ",que[i]->ad,que[i]->ad,que[i]->date);
    32     }
    33     printf("-1
    ");
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    mongodb 初学 意外 连接服务器异常(Connection refused)
    mongodb 关闭服务器
    Redis 入门指令
    mongodb 在 Ubuntu系统上的安装及卸载
    Java 使用 Redis
    随笔 -- IO -- Socket/ServerSocket -- 系统概述
    java enum(枚举)使用详解 + 总结
    Java -- IO -- 目录
    Java 流(Stream)、文件(File)和IO -- Java ByteArrayInputStream类
    INSERT INTO .. ON DUPLICATE KEY UPDATE ...
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/10882492.html
Copyright © 2020-2023  润新知