文章
29
粉丝
0
获赞
0
访问
1.1k
(1)算法思想:利用快慢指针,让快指针`fast`先向前`k`步,然后快慢指针一起向前,最后慢指针指向的就是倒数第`k`个节点
(2)实现步骤:设置快指针fast
和慢指针slow
。首先让fast
先前进k
步,然后再让快慢指针一起前进,知道fast
为空节点。
(3)代码:
int ReseverK(node* list, int k){
node* fast = list;
node* slow = list;
for(int i = 0;i<k;i++){
if(fast->link){
return 0;//提前遇到空节点直接返回0
}
fast = fast->link;
}
while(fast->link){//最后得到的慢指针对应的节点就是倒数第k个节点
slow = slow->link;
fast = fast->link;
}
return slow->data;
}
评分及理由
(1)得分及理由(满分5分)
得分:5分
理由:学生的算法思想描述清晰准确,使用了快慢指针的方法,通过一趟扫描即可找到倒数第k个节点,与标准答案的思路一致且效率相同。思想描述完整,符合题目要求。
(2)得分及理由(满分5分)
得分:3分
理由:实现步骤描述基本正确,但存在不完整之处。步骤中提到了让fast先前进k步,然后快慢指针一起前进直到fast为空节点,但没有明确说明当fast到达链表末尾时slow所指的位置就是倒数第k个节点。相比标准答案的步骤描述不够详细。
(3)得分及理由(满分5分)
得分:2分
理由:代码实现存在多处逻辑错误:
1. 函数名与题目要求不符(应为Search_k而不是ReseverK)
2. 链表结点类型定义不明确(使用了node*而不是标准的结构定义)
3. 在fast前进k步的循环中,判断条件错误:应该是if(!fast->link)而不是if(fast->link)
4. 主循环条件错误:应该是while(fast)而不是while(fast->link)
5. ...
登录后发布评论
暂无评论,来抢沙发