错误的代码:

#include <cstdio>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <string>
using namespace std;struct Node
{int Nodenow;int Nodenext;int data;Node *next;
};struct store
{int now;int next;int data;
}a[100005],b[100005];int turn[100005];void Node_Print(Node *head)
{Node *p = head;while(p != NULL){if(p -> Nodenext != -1)printf("%05d %d %05d",p->Nodenow,p -> data,p -> Nodenext);else{printf("%05d %d %d",p->Nodenow,p -> data,p -> Nodenext);}p = p -> next;if(p != NULL)printf("\n");}
}Node * ReversePart_Node(Node *head,int start,int end)
{if(start == end)return head;Node *pPrv = NULL;Node *pNow = head;Node *pNext = NULL;Node *BeforeStart = NULL; //开始的结点前的结点 Node *StartNode = NULL; //开始的时候的结点int i,j;//for循环指向需要反转的位置 for(i = 1; i <= start; i++){if(i == start){BeforeStart = pPrv;StartNode = pNow;}pPrv = pNow;pNow = pNow -> next;pNext = pNow -> next;}for(i = 1; i <= end - start; i++)  {pNext = pNow -> next; //保存下一个 pNow -> next = pPrv; //改变指向 pPrv = pNow; //移动 pPrv和 pNow pNow = pNext;}//反转部分 未反转前的第一个结点 反转之后变成该反转部分的最后一个结点 StartNode -> next = pNow; //连接 if(BeforeStart == NULL) //从head开始反转 {head = pPrv; //pNow 反转过后是 该反转部分的第一个结点 }else {BeforeStart -> next = pPrv; //连接反转部分前面的结点 和 该反转部分 }return head;
}int inturn(int ibegin,int stot)
{int i,j,found;int tot = 0;int cnt = 1;if(!turn[ibegin]) return 0;b[cnt++] = a[turn[ibegin]];found = a[turn[ibegin]].next;while(found != -1){b[cnt++] = a[turn[found]];found = a[turn[found]].next;}cnt--;return cnt;
}Node *Node_Creat(int tot)
{Node *head;head = (Node *)malloc(sizeof(Node));if(head == NULL){printf("Overflow\n");exit(1);}head -> data = b[1].data;head -> Nodenow = b[1].now;head -> Nodenext = b[1].next;Node *p1,*p2;p1 = p2 = head;for(int i = 2; i <= tot; i++){p1 = (Node *)malloc(sizeof(Node));if(p1 == NULL){printf("Overflow\n");exit(1);}p1 -> data = b[i].data;p1 -> Nodenow = b[i].now;p1 -> Nodenext = b[i].next;p2 -> next = p1;p2 = p1;}p2 -> next = NULL;return head;
}int main()
{int stot,reverse;int ibegin;int i,j;cin >> ibegin >> stot >> reverse;int tot = 0; //结点数 memset(turn,0,sizeof(turn));for(i = 1; i <= stot; i++){cin >> a[i].now >> a[i].data >> a[i].next;turn[a[i].now] = i;}tot = inturn(ibegin,stot);Node *head;head = Node_Creat(tot);for(i = 1; i <= tot/reverse; i++){head = ReversePart_Node(head, (i - 1)*reverse + 1, i*reverse);}head = changedata(head);Node_Print(head);return 0;
}
/*
00100 12 13
72222 12 -1
62222 11 72222
52222 10 62222
42222 9 52222
32222 8 42222
22222 7 32222
00000 4 99999
00100 1 12309
68237 6 22222
33218 3 00000
99999 5 68237
12309 2 33218
*/

后来根据一些数据的对比,发现反转后的结点下一个地址要发生改变,于是添加了一个函数改变结点中地址的值。

Node *changedata(Node *head)
{Node *p = head;while(p -> next != NULL){p -> Nodenext = p -> next -> Nodenow;p = p -> next;}p -> Nodenext = -1;return head;
}

改了一下输入方式,但是还是超时(挠头

迷之1025 反转链表相关推荐

  1. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  2. PAT 1025 反转链表 (25)(STL-map+思路+测试点分析)

    1025 反转链表 (25)(25 分) 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4, ...

  3. 1025. 反转链表 (25)

    1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请 ...

  4. C++学习之路 | PTA乙级—— 1025 反转链表 (20分)(精简)

    1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5 ...

  5. PAT乙级1025反转链表 25(分)

    1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为3→2→1→6→5→ ...

  6. PAT | 1025 反转链表 (25分)【超时问题 + 柳神代码】

    1025 反转链表 (25分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...

  7. [PAT乙级]1025 反转链表 (思路+精简代码)

    1025 反转链表 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K ...

  8. 1025 反转链表 (25 分)

    1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5 ...

  9. 【JAVA】PAT 乙级 1025 反转链表(测试点5超时,牛客网通过)

    [JAVA]PAT 乙级 1025 反转链表(测试点5超时,牛客网通过) 题目链接 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5 ...

最新文章

  1. svn 命令行查看history及比较不同版本
  2. 类目,延展,协议的基本概念
  3. 【NOI2016】国王饮水记【贪心】【斜率优化】【决策单调性】
  4. 简单暴力到dp的优化(中级篇)
  5. java queue 最大值_[剑指offer题解]队列的最大值/滑动窗口的最大值
  6. Flash翻书效果研究
  7. javascript 计算后结果失精度的问题解决
  8. Python绘制数码管(系统时间)
  9. 京东助手+淘宝试用助手+苏宁试用助手三合一v22102032021
  10. 思科模拟器路由表怎么看_Cisco路由配置教程 Cisco路由器静态路由与默认路由的配置方法图解...
  11. Windows任务栏图标变白解决方案
  12. android网络编程-socket基础
  13. 周爱民:真正的架构师是没有title的
  14. 设置域名跳转的几种方式
  15. csapp attack lab
  16. vmd安装包_【MMD相关】推荐点软件/插件
  17. Qt5 和 OpenCV4 计算机视觉项目:1~5
  18. crontab 每天凌晨12点定时器_清运队长每天凌晨3点转运垃圾,因为垃圾分类工作时间大大减少了...
  19. 《强化学习》 基本概念和交叉熵方法
  20. linux中位置变量

热门文章

  1. TCP SYN扫描技术探测原理
  2. 深圳xx区xx考场科目三2号线考试 手把手教学
  3. 动态网络下的极致隐匿?NA DFS去中心化存储协议助推NA(Nirvana)Chain成为企业级隐私网络
  4. JRE极限精简探求手册[1]——精简一个Swing的即时战略游戏
  5. IDEA代码审查插件
  6. 如何在IE11中设置兼容模式?设置的具体方法
  7. 【bzoj3685】普通van Emde Boas树 线段树
  8. android pubgmobile_BETA PUBG MOBILE
  9. uniapp 导航栏图标添加步骤
  10. teamviewer quicksupport 插件(下载)