深耕专业教研,探索前沿技术
信息技术来源:2026年3月杭州二中高三开学适应性考试

第 10 题

答案与解析

本题解析

参考答案

B

程序分析

d = [[2, 4], [7, 3], [4, -1], [1, 2], [8, 1]]
head = 0
p = head
while p != -1 and d[p][1] != -1:
    q = d[p][1]
    if d[p][0] % 2 == d[q][0] % 2:
        ...
    else:
        ...

p从head所指的下标0开始,q由d[p][1]取得,随后通过d[q][0]访问后继结点的数据。结合题目给定的链表语境,d[i][0]是下标i处结点的数据,d[i][1]是其后继结点的下标,-1表示没有后继。循环条件保证当前结点及其后继均存在,每轮处理p、q这两个相邻结点。

if d[p][0] % 2 == d[q][0] % 2:
    d[p][1] = d[q][1]

两个数据除以2的余数相等,说明它们奇偶性相同。将p的后继改成q的后继,就在逻辑链表中跳过了q,完成删除后继结点的操作。p保持不变,下一轮继续比较它与新的后继;d中原来存放q的列表项仍在,但已不属于从head可访问的链表。

else:
    p = d[p][1]

奇偶性不同时不删除结点,而是让p沿后继指针向后移动,继续处理下一对相邻结点。

整体功能

程序将原链表中每一段奇偶性相同的连续结点压缩为一个结点,只保留该段的第一个结点。

从head=0沿后继下标访问,初始结点下标顺序为0→4→1→3→2,对应的数据序列为2→8→7→1→4,可按奇偶性分为三段:偶数段[2,8]、奇数段[7,1]、偶数段[4]。

在第一段中保留2、删除8,使d[0][1]由4改为1;到第二段时保留7、删除1,使d[1][1]由3改为2。最后4没有后继,循环结束。此时从head开始的下标顺序为0→1→2,对应的数据序列为2,7,4。