文章

225

粉丝

0

获赞

0

访问

12.3k

头像
2009年(408)计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年12月16日 19:05
阅读数 9


评分及理由

(1)得分及理由(满分5分)

得分:4分

理由:学生的基本设计思想描述与标准答案基本一致,使用了双指针(P和q)的方法,通过让q先移动k个位置,然后P和q同步移动,当q到达链表末尾时P指向倒数第k个结点。这是一个正确且高效(一趟扫描)的思路。扣1分是因为在第一次识别结果中,描述“首先P指针指向头结点,q指针指向第k个结点”存在歧义:标准答案中初始时两个指针都指向第一个结点(头结点的下一个结点),然后移动q指针k步。学生的描述“q指针指向第k个结点”容易误解为直接定位到第k个结点,但结合后续描述可以理解其意图,因此只扣1分。

(2)得分及理由(满分5分)

得分:2分

理由:学生的详细实现步骤描述存在较多混乱和错误。在第一次识别结果中,步骤①不完整(“count”后无内容),步骤②“若q为空”与标准答案的“若p为空”不符,步骤③和④的逻辑顺序和条件判断混乱(例如步骤④“q指向下一个结点,则转②”与标准答案的p移动不一致)。第二次识别结果中步骤描述同样存在逻辑不清晰(如步骤④“转③”形成死循环)。整体上,步骤描述未能清晰、正确地反映双指针移动的计数和同步过程,因此扣3分。

(3)得分及理由(满分5分)

得分:2分

理由:学生的代码实现存在多处逻辑错误。主要问题包括:
1. 函数参数类型不一致:题目要求传入LinkList list(即头指针),但学生代码中使用了LinkList *L(指向指针的指针),这会导致类型不匹配和后续操作错误。
2. 指针初始化错误:代码中“LNode *p = L; *q = L->next;”存在语法问题(*q前缺少逗号或分号),且p初始化为L(即指向头结点),而标准答案中p和q初始应指向第一个结点(list->link)。
3. 循环逻辑错误:for循环中“q = q->next;”在q可能为NULL时未检查,会导致空指针访问。while循环中的if(count < k) count++; 但count在循环前已通过for循环隐含地计数了k步,这里的count判断是多余的,且会干扰正确结果。
4. 输出错误:最后输出的是q->data,但此时q已为NULL(因为while循环结束条件是q!=NULL),会导致访问空指针。正确应输出p->data。
代码整体框架虽试图实现双指针,但存在上述严重逻辑错误,因此扣3分。

题目总分:4+2+2=8分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发