文章

49

粉丝

0

获赞

0

访问

1.9k

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


评分及理由

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

学生答案的基本设计思想与标准答案一致,都是使用双指针法,通过一趟扫描找到倒数第k个结点。具体步骤是:先让一个指针移动k-1步,然后两个指针同步移动,直到第一个指针到达链表尾部,此时第二个指针指向倒数第k个结点。该思路正确且高效,因此得5分。

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

学生的详细实现步骤描述清晰,包括:初始化两个指针指向头结点;先移动第一个指针k-1步(并检查边界);然后同步移动两个指针直到第一个指针的下一个为空;最后输出结果。步骤逻辑正确,但存在一个小问题:步骤②中“p指向的下一个结点为空”应改为“p为空”或“p->link为空”的检查可能不够精确(但结合代码上下文可理解),但整体步骤正确,因此扣1分,得4分。

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

学生的代码实现基本正确,但存在以下逻辑错误:
- 在for循环中,p移动k-1步后,代码中执行了`p = p->link;`和`q = q->link;`,这会导致p和q多移动一步,使得最终q指向倒数第k+1个结点而非倒数第k个结点(错误点)。
- 标准答案中,q初始指向第一个结点,而学生代码中q初始指向头结点(list),但后续步骤中q移动的方式可能补偿了这一点,但多移动一步的问题仍存在。
- 边界检查:在for循环中检查`p->link == NULL`是正确的,但移动后未考虑k=1的情况(可能出错)。
由于存在逻辑错误(多移动一步),但整体框架正确,因此扣2分,得3分。

题目总分:5+4+3=12分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发