PAT乙级1025反转链表 python(运行超时未解决)

题目
在这里插入图片描述
在这里插入图片描述
思路
存储链表,分段逆转
需要注意的几个测试点:
测试点6:需要遍历输入的测试节点都是有效结点,输入的N并不是链表的实际长度
测试点0-4需要考虑的地方:
(1)每一个逆转子链表的最后一个结点的next存储的是下一个逆转子链表的第一个结点的add
(2)输出最后一个结点的next应该为-1
测试点5
好像单个for循环无嵌套也超时,不知该如何修改,网上大多为C语言,C++等撰写。

代码:


first_add,node_sum,reverse_K=list(map(str,input().split()))
list_input={}
for i in range(int(node_sum)):
    add,node,next=list(map(str,input().split()))
    list_input[add]=[node,next]

reverse_K=int(reverse_K)
list_=[]
while first_add!='-1': #遍历输入节点,形成链表
    list_.append([first_add,list_input[first_add][0],list_input[first_add][1]])
    first_add = list_input[first_add][1]

node_sum=len(list_)  #排除无效节点
final_list=[]
sub_list_num,rinmder_node_num=divmod(node_sum,reverse_K)
for i in range(0,sub_list_num):
    sub_list=list_[i*reverse_K:(i+1)*reverse_K] #0*4,1*4  1*4,2*4
    final_list.extend(sub_list[::-1])

for i in range(0,sub_list_num*reverse_K-1): #修改各个节点中next的值
        final_list[i][2]=final_list[i+1][0]

if rinmder_node_num!=0: #当整个输入存在不需要转置的节点时
    final_list.extend(list_[-rinmder_node_num::])
    final_list[sub_list_num*reverse_K-1][2] = final_list[sub_list_num*reverse_K ][0]

for i in final_list[:-1]:#输出
    print(i[0],i[1],i[2])#list.reverse()

print(final_list[-1][0],final_list[-1][1],'-1')

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值