文章

14

粉丝

0

获赞

0

访问

1.2k

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

1.用两个指针,A指针在前,B指针与A指针间隔为5,A指向最后一个节点时,B指向所需元素

2.(1) A指针出发,向前移动k步

   (2) A向前一步,B向前一步

   (3) 重复(2),直到A->next == null

3.

find(node* head){

 int cnt = k; //计数器
 node* p = head; // p指针
 node* q = head; // q指针

 // p先出发
 while (k--) {
  p = p->next;
 }

 while( p-> next != null ) {

  p = p->next; // 同时向后
  q = q->next;

 }
 return q;
}

 


评分及理由

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

得分:3分

理由:学生的基本设计思想描述基本正确,提到了使用两个指针并保持间隔k,当A指针到达末尾时,B指针即为所求。这与标准答案的核心思想一致。但是,学生的描述存在不严谨之处:第一句“间隔为5”中的“5”应为“k”,这是一个明显的笔误或概念混淆。此外,描述过于简略,没有明确指出初始时两个指针的位置关系以及移动的触发条件。因此扣2分。

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

得分:3分

理由:学生的实现步骤基本遵循了双指针法的逻辑,分为“A先移动k步”和“AB同步移动直到A到末尾”两个阶段。步骤框架正确。但是,步骤描述存在严重缺陷:第一步“A指针出发,向前移动k步”没有考虑链表长度可能小于k的情况,如果链表长度小于k,此步骤中p指针会变成空指针(NULL),后续对p->next的访问将导致错误。步骤描述中缺少对边界条件的判断和处理。因此扣2分。

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

得分:1分

理由:学生的代码实现存在多处逻辑错误和语法问题:

  1. 函数签名不完整,未定义参数类型和返回值类型。
  2. 变量`k`未定义,直接使用。
  3. 第一个`while (k--)`循环在移动指针`p`时,未检查`p`是否已为`NULL`。若链表长度小于k,此循环将导致访问空指针的`next`域,程序崩溃。
  4. 第二个循环条件`while( p-> ne...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发