深耕专业教研,探索前沿技术
信息技术来源:2026年4月稽阳联谊学校高三联考

第 12 题

答案与解析

本题解析

参考答案

C

程序分析

rst = [0]*11; p = i = 0
while i<len(a):                     #①
    if p != -1:
        ...
    else:
        ...

题干给出a的每个元素依次保存数据和后继结点下标,−1表示链表结束。rst各项初始化为0,p和i从0开始;循环条件限制i的取值范围,循环内根据p是否为−1选择分支。

if p != -1:
    if a[p][0] % 2 == 0:
        rst[i] += 1             #②
        p = a[p][1]                 #③

p不为−1时,a[p][0]取得当前结点的数据。若该数据为偶数,rst[i]加1;a[p][1]保存后继结点下标,将它赋给p就是沿链表移动到下一个结点。原程序把这两条语句放在同一个偶数判断分支内。

else:
    print("该位置开始的链表中偶数个数有:",rst[i])
    i += 1
    p = i                       #④

p为−1时输出rst[i],随后i加1,并令p取新的i,开始处理下一个起点。因此i记录本次遍历的起点下标,p记录当前结点下标,rst[i]用于累计从起点i出发遇到的偶数个数。

填空分析

③

初始i=p=0,a[0][0]=37为奇数,内层if中的计数和③均不执行,p保持为0;程序也无法进入p=−1的分支更新i,于是反复检查37,陷入死循环。

遍历链表时,只有计数需要判断奇偶,指针每次都应移向后继结点。因此③应向外退格一级,与内层if对齐,仍保留在if p != -1分支内:

if p != -1:
    if a[p][0] % 2 == 0:
        rst[i] += 1
    p = a[p][1]