题目
思路:
存储链表,分段逆转
需要注意的几个测试点:
测试点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')
运行结果