返回工具主页

2024年1月选考 T12 真题解析

通过动画演示链表节点的“头插负数、尾插正数”重排过程,理解按绝对值有序到按值有序的转变。

题目

使用列表 d 模拟链表结构,每个节点包含数据区域和指针区域,h 为头指针。链表中各节点已按数据区域中数值的绝对值由小到大排列。现要修改链接关系,使链表按数值由小到大排列。有如下 Python 程序段(高亮行表示当前执行位置):

t=h
p=d[h][1]
while p!=-1:
q=d[p][1]
if d[p][0]>0:
d[t][1]=p
t=p
else:
d[p][1]=h
h=p
p=q
d[t][1]=-1

d = [[1,3],[14,4],[-18,-1],[-11,1],[16,2]](已按绝对值升序整理),h = 0,运行后链表的节点顺序为 ?

注:为使“按绝对值升序”条件成立,原始输入数据已整理为 d[0]→d[3]→d[1]→d[4]→d[2]→-1。

节点状态表

索引 d[i][0] d[i][1]

图例

负数节点
正数节点
h 新链头指针
t 正数链尾指针
p 当前遍历节点
q 下一节点(断链保护)

链表结构变化

原链表(按绝对值升序,剩余待处理) 固定顺序 0 → 3 → 1 → 4 → 2 → -1
新链表(按数值升序,当前已整理) 显示 h 到 t 的已整理部分

演示控制

点击“开始”逐步查看链表重排过程。

思路解析