1025. 反转链表 (25) python篇

PAT(Python)-1025:反转链表(25) 给定一个常数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(5)、以及正整数K( 接下来有N行,每行格式为: Add 阅读详情

1025. 反转链表 (25)

时间限制
300 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

给定一个常数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

# -*- coding: utf-8 -*-  
# 思路:从给定的链首到链末共有数据个数n加1项,id为前n项,next为后n项  
def link(address,head,li):  # 采用递归将链表所用节点依次存入列表  
    if head in address:  
        arrow = address[head]  
        li.append(arrow)  
        return link(address,arrow,li)  
    else:  
        return li  
head,N_all,cell = input().split()  # 读取第一行输入:首项元素id,元素个数N_all,反转间隔cell  
N_all,cell = int(N_all),int(cell)  # 将N与cell转换为整数  
address,data = {},{}  # 初始化两个字典,其中address保存id-next关系,data保存id-data关系  
for i in range(N_all):  # 将输入信息存入address和data中  
    a,b,c = input().split()  
    address[a],data[a] = c,b     
# 调用link()函数将所给信息按链接顺序存入id_plus,有N_all+1个元素,末项为链尾指针,指向未知id或为-1  
id_plus = link(address,head,[head])  # 第三项必须为[head]而不是[],因为link()函数无法添加第一个id  
id_plus[-1] = '-1'  # 指定链尾指针指向-1  
N_e = len(id_plus) - 1  # id_plus中的元素个数为可链接到的元素,从首项到最后的-1,实际对应的数据个数应减1  
num, rem = N_e // cell, N_e % cell  # 判断要对那些数据进行反转  
if num:  # 可链接到的数据个数不小于反转间隔  
    for i in range(num):  
        id_plus[(i*cell):((i+1)*cell)] = id_plus[(i*cell):((i+1)*cell)][::-1]  # 反转  
for k,v in enumerate(id_plus[:-1]):  # 按规定格式,打印id,data,next  
    s = '{} {} {}'.format(v,data[v],id_plus[k+1])  
    print(s)
有一个测试点超时,请大神指教!
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100010 //用双向静态链表来解决本问题,定义链表长度为100010 
typedef struct Node    //定义结点         
{
	int data;          //存储数据 
	int addr;          //存储当前地址 
	int next;          //后指针,存储下一节点的地址 
	int prior;         //前指针,存储前一节点的地址 
}Node;
int num,n,address,sum=1;    //num为输入节点的总数,n为每次反转节点的个数,address为第一个结点的地址,sum为计数器,记录有效节点的个数 
void read(Node Nodes[]);   //读取数据,建立链表 
void reverse(Node Nodes[]); //反转链表,输出结果 
int main()
{
	Node Nodes[MAXSIZE];
	scanf("%d%d%d",&address,&num,&n);
	read(Nodes);
	reverse(Nodes); 
	return 0;
} 

void read(Node Nodes[])   //读取数据 
{
	int i,addre,addre_p;   //addre为当前结点的地址,addre_p为前一节点的地址 
	for (i=0;i<num;i++)      //将每个结点放在地址对应下标的数组单元中,并使当前结点的后指针指向下一节点 
	{
		scanf("%d",&addre);
		scanf("%d%d",&Nodes[addre].data,&Nodes[addre].next);
		Nodes[addre].addr=addre;
	}
	addre=address;
	Nodes[addre].prior=-1;   //使第一个结点的前指针指向-1 
	addre_p=Nodes[addre].addr; //记录第一个结点的地址 
	addre=Nodes[addre].next;   //使下一个结点成为当前结点 
	while (addre!=-1)
	{
		Nodes[addre].prior=addre_p;  //使当前结点的前指针指向前一个结点 
		addre_p=Nodes[addre].addr;   //使当前结点成为前结点 
		addre=Nodes[addre].next;     //使下一个结点成为当前结点 
		sum++;                       //有效结点数+1 
	}
}

void reverse(Node Nodes[])  //反转链表,输出数据 
{
	int i,addre,j,addre_save,addre_prior; //addre为当前结点的地址,addre_save为每次反转前的n个结点中最后一个结点的地址, 
	addre=address;                        //addre_prior为每次反转前的n个结点中首个结点的地址
	if (n==1||n>sum)                      //如果每次反转结点的个数等于1或大于有效结点的个数,则不反转,依次输出即可 
	{
		while(addre!=-1)
		{
			if (Nodes[addre].next==-1)
			printf("%05d %d %d\n",Nodes[addre].addr,Nodes[addre].data,Nodes[addre].next);
			else
			printf("%05d %d %05d\n",Nodes[addre].addr,Nodes[addre].data,Nodes[addre].next);
			addre=Nodes[addre].next;
		}
	}else                                //否则,进行反转,每次反转n个结点 
	{
		for (i=0;i<sum/n;i++)           //总反转的次数为 sum/n 
		{
			for (j=0;j<n-1;j++)         //寻找每次反转前的n个结点中最后一个结点的地址 
			{
				addre=Nodes[addre].next;
			}
			addre_save=addre;          //保存本次反转前最后一个结点的地址 
			if (i!=0)                  //第一次反转不输出,输出前一次反转后的n个结点中最后一个结点的地址,数据以及本次反转后第一个结点的地址(注意,这样每次反转才能衔接) 
			printf("%05d %d %05d\n",Nodes[addre_prior].addr,Nodes[addre_prior].data,Nodes[addre].addr);
			for (j=0;j<n-1;j++)       //除最后一个结点,依次输出本次反转后的其余结点 
			{
				printf("%05d %d %05d\n",Nodes[addre].addr,Nodes[addre].data,Nodes[addre].prior);
				addre=Nodes[addre].prior;
			}
			addre_prior=addre;      //保存本次反转最后一个结点的地址 
			if (Nodes[addre_save].next==-1)  //如果有效结点已用完,即没有剩余有效结点,则输出最后一个结点,注意其下一个结点地址为-1 
			printf("%05d %d %d\n",Nodes[addre].addr,Nodes[addre].data,-1);
			else if (i==sum/n-1)            //如果这是最后一次反转,则输出最后一个结点,注意其下一个结点的地址为不反转的第一个结点的地址 
			printf("%05d %d %d\n",Nodes[addre].addr,Nodes[addre].data,Nodes[addre_save].next);
			addre=Nodes[addre_save].next;  //使下次反转前的第一个结点成为当前结点 
		}
		for (i=0;i<sum%n;i++)    //依次输出剩余不需要反转的结点 
		{
			if (Nodes[addre].next==-1)
			printf("%05d %d %d\n",Nodes[addre].addr,Nodes[addre].data,Nodes[addre].next);
			else
			printf("%05d %d %05d\n",Nodes[addre].addr,Nodes[addre].data,Nodes[addre].next);
			addre=Nodes[addre].next;
		}
	}	
}
用双向静态链表解决,这次不再超时

PAT 1025 反转链表 python (有超时) 1025 反转链表 (25)(25 分) 给定一个常数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(&lt;= 10^5^)、以及正... 阅读详情

相关推荐

B1025 反转链表(python)

1025 反转链表 (25分) 给定一个常数 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 个结点的地址、结点总个数正整数 ...

傅里叶变不出的博客 362

1025 反转链表 (25 分) PAT乙级 C++/Python版

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

玮智能的博客 1519

PAT乙级练习题_1025“反转链表”_python解题

原题 给定一个常数 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 (≤10510^5105)、以及正整数 K (≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。 接下来有 N 行,每行格式为: Address Data Next 其中 Add

PAT1025

小心可能为环 话说PAT OJ好像有bug,因为我一开始提交的A错了案例7,改一下的B错案例8,再提交A竟然AC了。。但是再提交A仍然错了案例7. #include <iostream> #include <bits/stdc++.h> using namespace std; struct Node { string adr; int va; ...

剑似生平 322

基因的富集分析

通过RNA_seq差异表达分析等获得一组基因,想要进一步了解这些基因可能参与哪些生物学过程,具有哪些功能,一般就会用到基因的富集分析了。现在小麦基因注释信息已经可以获得,目前来看包括两套。一个是TGACv1,另一个就是IWGSC1.0。需要用到一个叫“clusterProfiler”的R包。下面用到的数据集来自TGACv1。1、安装source("https://bioconductor.org/b

xxxxx 1万+

[STM32H750]HAL库下FMC驱动正点原子MCU屏的移植与优化

本文详细介绍了在STM32H750平台上使用HAL库移植与优化正点原子MCU屏幕驱动的完整过程。重点解析了FMC硬件配置、Cache一致性处理、精确延时实现等关键技术难点,提供了实用的移植方案和性能优化技巧,帮助开发者高效解决屏幕显示问题。

rock5的博客 286

1025. 反转链表 (25) PAT

1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3

寻找如意的博客 384

基于51单片机+SYN6288语音播报

51单片机控制SYN6288语音播报资料SYN6288模块原理图语音合成命令接线如何接线实现原理程序代码main.csyn6288.cuart.cdelay.c基于 51单片机的其他项目基于51单片机+遥控灯基于51单片机+LCD1602显示基于51单片机+红外遥控解码+LCD1602显示基于51单片机+DHT11温湿度+LCD1602显示基于51单片机+DS18B20温度测温器+LCD1602显示尾声 资料 我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。 SYN6288模块原理图 语音合成

weixin_47457689的博客 3万+

PAT1025 反转链表 python 无超时

目录PAT1025反转链表输入格式输出格式输入样例:输出样例:代码测试结果 PAT1025反转链表 给定一个常数 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 个测试...

围棋 889

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

1025 反转链表 (25 分)

1025 反转链表 (25 分) 题意描述: 给定一个常数 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 个结点的地址、结点...

花花生的博客 353

UG二次开发GRIP刻字

UG二次开发GRIP刻字

qq285503851的博客 1138

(python 3)1025 反转链表 (25分)

1025反转链表(25分) 给定一个常数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(≤10​5​​)、以及正整数K(≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数...

Hanlin的博客 961

tsfknn 预测R语言中的时间序列

rolling参数应该设置为FALSE,这使得最后的18个观测值成为测试集,其余的作为训练集;如果我们将rolling参数设置为默认值TRUE,那么测试集就不会是一个恒定的向量。lag 滞后参数表示时间序列数据的滞后值。在这个例子中,由于我们的时间序列数据是月度的,我们将参数设置为1:12。作为药品福利计划的一部分,澳大利亚健康保险委员会记录的属于ATC代码A10的产品的每月政府支出(百万美元)。我们将使用tsfknn包,它可以用来预测R语言中的时间序列。格式:ts类别的月度时间序列。

Mrrunsen的博客 323

【数据分析】R语言分段结构方程模型手把手教程(Piecewise Structural Equation Model)

分段结构方程模型(Piecewise Structural Equation Model, SEM)是一种用于分析变量之间因果关系的统计方法。它通过将复杂的因果关系分解为多个简单的线性模型来评估变量之间的直接和间接效应。与传统的结构方程模型(SEM)不同,分段结构方程模型不需要假设数据的多变量正态分布,因此在处理非正态数据时更为灵活。

专注生信领域 2649

1025 反转链表

1025 反转链表 记录一道瞎研究了一下午的题…方法比较笨,但好歹是独立把自己的思路实现出来了 给定一个常数 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),即要

Bit0 1006

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

PAT乙级_1025 反转链表_Python_AC解法_含疑难点

本文介绍了PAT乙级1025题"反转链表"的Python解法。作者采用字典存储节点数据,通过索引列表实现K长度子链的反转。关键优化点包括:使用sys.stdin快速输入、元组存储节点数据、join一次性输出,这些优化使总运行时间控制在250ms内。特别提醒:1)需处理游离节点,实际链表长度可能小于N;2)最后节点需单独处理next为-1;3)避免在反转时维护next指针以减少耗时。测试点5超时的原因在于反转操作和未优化的I/O处理,文章对比了不同实现方式的性能差异。

CongQianS1的博客 742

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【PAT_Python解】1025 反转链表

【代码】【PAT_Python解】1025 反转链表。

新时代先锋的博客 738

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PAT1025 反转链表 (25 分)

题目描述 给定一个常数 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 (≤10​5​​)...

liuzuoping的博客 308

1025 反转链表python3无超时

终于在卡了好几天之后想到了解决办法,这道题给出的代码并不能保证完全成功,不超时的概率大概在50% 文章目录一、最初的代码二、代码改进 一、最初的代码 这个问题一般解决思路如下: 获得正序链表; 根据条件反转链表; 输出链表; 代码如下: #!/usr/bin/env python # -*-coding:utf-8 -*- ''' @File : test.py @Time : 2020/04/01 10:24:29 @Author : Schiller Xu @Versio

洛阳山 548

PAT 1025反转链表

给定一个常数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(5)、以及正整数K( 接下来有N行,每行格式为: Add

zhongdaliutao的博客 671
上一篇: 1050. 螺旋矩阵(25) python篇
下一篇: python建立二维数组问题
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值