迷之1025 反转链表
错误的代码:
#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 反转链表相关推荐
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- 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, ...
- 1025. 反转链表 (25)
1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请 ...
- C++学习之路 | PTA乙级—— 1025 反转链表 (20分)(精简)
1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5 ...
- PAT乙级1025反转链表 25(分)
1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为3→2→1→6→5→ ...
- PAT | 1025 反转链表 (25分)【超时问题 + 柳神代码】
1025 反转链表 (25分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...
- [PAT乙级]1025 反转链表 (思路+精简代码)
1025 反转链表 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K ...
- 1025 反转链表 (25 分)
1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5 ...
- 【JAVA】PAT 乙级 1025 反转链表(测试点5超时,牛客网通过)
[JAVA]PAT 乙级 1025 反转链表(测试点5超时,牛客网通过) 题目链接 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5 ...
最新文章
- svn 命令行查看history及比较不同版本
- 类目,延展,协议的基本概念
- 【NOI2016】国王饮水记【贪心】【斜率优化】【决策单调性】
- 简单暴力到dp的优化(中级篇)
- java queue 最大值_[剑指offer题解]队列的最大值/滑动窗口的最大值
- Flash翻书效果研究
- javascript 计算后结果失精度的问题解决
- Python绘制数码管(系统时间)
- 京东助手+淘宝试用助手+苏宁试用助手三合一v22102032021
- 思科模拟器路由表怎么看_Cisco路由配置教程 Cisco路由器静态路由与默认路由的配置方法图解...
- Windows任务栏图标变白解决方案
- android网络编程-socket基础
- 周爱民:真正的架构师是没有title的
- 设置域名跳转的几种方式
- csapp attack lab
- vmd安装包_【MMD相关】推荐点软件/插件
- Qt5 和 OpenCV4 计算机视觉项目:1~5
- crontab 每天凌晨12点定时器_清运队长每天凌晨3点转运垃圾,因为垃圾分类工作时间大大减少了...
- 《强化学习》 基本概念和交叉熵方法
- linux中位置变量
热门文章
- TCP SYN扫描技术探测原理
- 深圳xx区xx考场科目三2号线考试 手把手教学
- 动态网络下的极致隐匿?NA DFS去中心化存储协议助推NA(Nirvana)Chain成为企业级隐私网络
- JRE极限精简探求手册[1]——精简一个Swing的即时战略游戏
- IDEA代码审查插件
- 如何在IE11中设置兼容模式?设置的具体方法
- 【bzoj3685】普通van Emde Boas树 线段树
- android pubgmobile_BETA PUBG MOBILE
- uniapp 导航栏图标添加步骤
- teamviewer quicksupport 插件(下载)