当前位置: 首页 > news >正文

反转链表

链接:http://www.nowcoder.com/pat/6/problem/4051

题目描述

给定一个常数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是下一结点的地址。



输出描述:

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

 

输入例子:

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

思路:这是这几天做题以来遇到的比较麻烦的一个问题了。
题目看起来不算难,但是很容易超时。需要考虑用一些简单的方法来保存数据和访问数据。
这是看了别人的代码以后做出来的,认真学习学习。

一般情况下,都是用空间换时间!
 1 #include "iostream"
 2 #include <iomanip>
 3 #include <string.h>
 4 #include <string>
 5 #include <vector>
 6 #include <cmath>
 7 #include <cctype>
 8 #include <algorithm>
 9 using namespace std;
10  
11 int pos[100005];
12 int value[100005];
13 int list[100005];
14 int res[100005];
15 int main()
16 {
17     int n, r, i;
18     int begin;
19     cin >>begin >>n >>r;
20     for(i=0; i<n; ++i)
21     {
22         int x;
23         cin >>x;
24         cin >>value[x] >>pos[x] ;
25     }
26     int k=0;
27     while(begin != -1)
28     {
29         list[k] = begin;
30         res[k++] = begin;
31         begin = pos[begin];
32     }
33     for(int i=0; i<(k-(k%r)); ++i)                   //这个需要理解
34     {
35         res[i] = list[(i/r)*r+r-(i%r)-1];            //这个需要理解
36     }
37     for(int i=0; i<k-1; ++i)
38     {
39         cout <<setiosflags(ios::right) <<setfill('0') <<setw(5) <<res[i] <<" ";
40         cout <<value[res[i]] <<" ";
41         cout <<setiosflags(ios::right) <<setfill('0') <<setw(5)<<res[i+1] <<endl;
42     }
43     cout <<setiosflags(ios::right) <<setfill('0') <<setw(5)<<res[k-1] <<" " <<value[res[k-1]] <<" " <<-1 <<endl;
44     return 0;
45 }

 

转载于:https://www.cnblogs.com/mtc-dyc/p/4622180.html

相关文章:

  • kettle菜鸟学习笔记2----第一个kettle转换的建立及执行
  • shell script 入门 笔记
  • Dynamics AX 2012 R2 客制化RDP报表参数对话框
  • BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
  • Alwasyon环境下增加数据文件需要注意的几点
  • 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)
  • ldd查询命令或软件共享的函数库(动态)
  • 员工考勤系统
  • C# 打印本地PDF文件
  • javascript的位操作、整数、二进制
  • .net 按比例显示图片的缩略图
  • 线上解决问题分析
  • JavaScript定时机制setTimeout与setInterval研究
  • UVA 11174 Stand in a Line 树dp+算
  • HttpSessionListener的用法
  • classpath对获取配置文件的影响
  • Cumulo 的 ClojureScript 模块已经成型
  • IDEA常用插件整理
  • Iterator 和 for...of 循环
  • JS学习笔记——闭包
  • node入门
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • rc-form之最单纯情况
  • ReactNativeweexDeviceOne对比
  • Solarized Scheme
  • 服务器从安装到部署全过程(二)
  • 软件开发学习的5大技巧,你知道吗?
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #if #elif #endif
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)WCF的Binding模型
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计ssm电影分享网站
  • (六)vue-router+UI组件库
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (实战篇)如何缓存数据
  • (四)linux文件内容查看
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)关于多人操作数据的处理策略
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .gitattributes 文件
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 反编译_.net反编译的相关问题
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • /var/lib/dpkg/lock 锁定问题
  • :O)修改linux硬件时间
  • @EnableConfigurationProperties注解使用
  • [\u4e00-\u9fa5] //匹配中文字符
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [boost]使用boost::function和boost::bind产生的down机一例