本题看似繁琐,其实只需要分为两个步骤来做
首先按照给定的首个结点坐标和输入的多组数据,来将单链表的顺序给排出来
然后根据题意 按照每个结点位置的数值来将单链表分成三个部分:小于0,大于0小于K,大于K
最后输出就ok
代码如下:
import sys
first , n , k = input().split()
n = int(n)
k = int(k)
addr_data = dict()
addr_next = dict()
data_shuchu = dict()
data_print = dict()#这两个是为了方便输出
addr_sort = []
for h in range(n):#接收输入数据,保存到字典里,方便输出
addr , data , next = sys.stdin.readline().split()
addr_data[addr] = data
addr_next[addr] = next
data_shuchu[int(data)] = f'{addr} {data}'
data_print[int(data)] = addr
while first != '-1':#单链表排序(正序)
addr_sort.append(first)#得到单链表次序的结点坐标列表
first = addr_next[first]
data_sort = [int(addr_data[i]) for i in addr_sort]#得到单链表次序的数值列表
res = []
#分三个循环按照数值大小分成三块
for i in data_sort:
if i<0:
res.append(i)#负数
for j in data_sort:
if 0<=j<=k:
res.append(j)#小于K值的
for h in data_sort:
if h>k:
res.append(h)#大于K值的
for v in range(len(res)-1):
sys.stdout.write(f'{data_shuchu.get(res[v])} {data_print.get(res[v+1])}\n')
sys.stdout.write(f'{data_shuchu.get(res[-1])} -1\n')
因为怕超时,所以用了sys模块的stdin和stdout的输入输出方式提高效率,虽然最后还是超时了。。。
对于创建字典和列表一类的,千万不要怕麻烦,创建的越多中间的过程会越简单,只是你要记得各种名称,别把自己给弄晕了就成。。。
下面是提交结果:

本文介绍了一种使用Python实现的链表排序算法,并将其数值按大小分段输出的方法。通过创建多个辅助字典,简化了排序和分段过程,最终实现了负数、0到K之间的数以及大于K的数的分类输出。

被折叠的 条评论
为什么被折叠?



