题意说的很清楚了,这种题的话,做的时候最好就是在纸上自己亲手模拟一下,清楚一下各个指针的情况,

这样写的时候就很清楚各个指针变量保存的是什么值。

PS:一次AC哈哈,所以说自己动手在纸上画画还是很有好处的~

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <queue>
using namespace std;
const int maxn=+; struct Node{
int data;
int next;
}node[maxn],ans[maxn];
int main()
{
int first,n,k;
int addr,data,next;
scanf("%d %d %d",&first,&n,&k);
for(int i=;i<n;i++){
scanf("%d %d %d",&addr,&data,&next);
node[addr].data=data;
node[addr].next=next;
}
int p=first;
int lastRear=-;//上K个节点的最后节点的地址
int newfirst; //新链表的首地址
while(p!=-){
int head,last;
head=last=p;
int tmp=head;
//用于判断剩余的节点个数是否>=k个
for(int i=;i<k- && tmp!=-;i++){
tmp=node[tmp].next;
}
//若剩余节点<k,则按原来的顺序即可
if(tmp==-){
ans[lastRear].next=p;
while(p!=-){
ans[p].data=node[p].data;
ans[p].next=node[p].next;
lastRear=p;
p=node[p].next;
}
break;
} for(int i=;i<k && p!=-;i++){
ans[p].data=node[p].data;
if(i!=)
ans[p].next=last;//后一个指向前一个
last=p;
p=node[p].next;
}
if(lastRear!=-){
ans[lastRear].next=last; //上K个节点的末尾指向当前K个节点的最后一个
}
else{
newfirst=last; //新链表的首地址
}
lastRear=head; //反转,头部变成了末尾
}
ans[lastRear].next=-; while(newfirst!=-){
if(ans[newfirst].next!=-)
printf("%05d %d %05d\n",newfirst,ans[newfirst].data,ans[newfirst].next);
else
printf("%05d %d %d\n",newfirst,ans[newfirst].data,ans[newfirst].next);
newfirst=ans[newfirst].next;
}
return ;
}

最新文章

  1. UVA 10815
  2. ArcGIS中的北京54和西安80投影坐标系详解
  3. iOS 开发压缩--SSZipArchive
  4. 为什么我要称自己为Javascript程序员
  5. spoj 2
  6. [Cocos2d-x v3.x]序列帧动画
  7. VS2010中经常使用的快捷键
  8. MVC中关于JSON的处理
  9. C语言笔记之结构体
  10. 64位WIN7+oracle11g+plsql
  11. asp.net mvc上传头像加剪裁功能
  12. php学习的第8天
  13. 在asp.net web api 2 使用 Serilog 记录日志
  14. Spark RPC框架源码分析(三)Spark心跳机制分析
  15. Linq:使用Take和Skip实现分页
  16. 【LeetCode算法-7】Reverse Integer
  17. 铁板纹理 Base Shape
  18. January 12th, 2018 Week 02nd Friday
  19. dedecms调用全站相关文章怎么设置
  20. 简单全局HOOK拦截大部分键盘消息

热门文章

  1. November 08th, 2017 Week 45th Wednesday
  2. layui 弹出层监听 判断弹出框的大小
  3. shiro实战系列(十)之Subject
  4. jenkins自动部署到tomcat报错:ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception
  5. vector使用小结
  6. monitorix(linux)系统和网络监控公工具
  7. golang sqlite3 CRUD
  8. Scala--映射和元组
  9. struts2_Interceptor
  10. 2017-2018-1 20155202 张旭 嵌入式C语言——时钟提取时分秒