文章
14
粉丝
0
获赞
0
访问
1.2k
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分
理由:学生的代码实现存在多处逻辑错误和语法问题:
登录后发布评论
暂无评论,来抢沙发