信息技术来源:镇海中学2026年5月高三高考模拟考试
第 11 题
答案与解析
本题解析
参考答案
B
程序分析
head = 0
s = [["A", 1], ["B", 2], ["C", 3], ["D", 4], ["E", 5], ["F", -1]]
n = int(input()); p1 = p2 = head
for i in range(n):
p2 = s[p2][1]题干说明 s 表示链表。每项的第 0 个元素保存字母,第 1 个元素保存后继结点的下标,−1 表示没有后继;head=0 是头指针,指向首结点 A,链表顺序为 A→B→C→D→E→F。p1、p2 都从首结点出发,for 循环只让 p2 沿后继链接前进 n 次,因此循环后 p2 比 p1 领先 n 条链接。
if p2 == -1:
head = s[head][1]
else:
while ①:
p1 = s[p1][1]
p2 = s[p2][1]
②若 p2 为 −1,程序将头指针改为原首结点的后继,完成首结点删除。题目限定 n 小于结点总数,本题进入 else 分支。while 循环中的两条已知语句让 p1、p2 每轮各前进一个结点,二者仍相隔 n 条链接;循环结束后再执行空②。
填空分析
①
删除倒数第 n 个结点,需要找到它的前驱结点并修改前驱的链接。设链表共有 L 个结点,目标位于第 L−n+1 个,前驱位于第 L−n 个。p2 比 p1 领先 n 个位置,因此让 p2 停在第 L 个结点(尾结点)时,p1 恰好指向目标的前驱。尾结点的后继为 −1,所以只要 p2 还有后继就继续循环,填 s[p2][1] != -1。若使用 p2 != -1,会多前进一轮,使 p1 到达目标结点而不是其前驱。
②
此时 s[p1][1] 保存待删除结点的下标,s[s[p1][1]][1] 保存待删除结点的后继下标。要让前驱直接连到目标的后继,应填 s[p1][1] = s[s[p1][1]][1]。这会跳过目标结点,无须删除列表 s 中的存储项。当 n=1 时,目标为尾结点,其后继是 −1,同一语句会将前驱设为新的尾结点。两空对应选项 B。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_zhenzhongmoni_q011
