文章
26
粉丝
93
获赞
1
访问
1.5k
评分及理由
(1)得分及理由(满分5分)
学生描述的基本设计思想是:先遍历链表获取长度len,再通过len-k计算正数位置进行第二次遍历找到结点。该方法需要两遍扫描链表,而标准答案要求尽可能高效(一趟扫描)。虽然思路正确,但效率不如标准答案的一趟扫描方法。根据评分说明,若采用两遍扫描最高给10分(但此处是设计思想部分,单独评分)。考虑到设计思想描述清晰且正确,但未达到最优效率,扣1分。得4分。
(2)得分及理由(满分5分)
学生详细实现步骤与设计思想一致:先计算长度len,再判断len-k是否有效,最后二次遍历到目标结点。步骤描述正确,但同样未实现一趟扫描的高效要求。步骤分扣1分。得4分。
(3)得分及理由(满分5分)
代码实现存在以下问题:
1. 函数参数缺少k(应为int num(LinkList list, int k)),但根据上下文可能为识别错误(误写),不扣分。
2. 计算长度时,while循环条件为p->next != NULL,这会漏掉最后一个结点(正确应为p != NULL),导致len少1,逻辑错误。扣2分。
3. for循环条件i <= len-k会多移动一次(应为i < len-k),因为从头结点开始移动len-k次可到目标结点(头结点不算数据结点)。但学生代码中list是表头结点,第一次移动后到第一个数据结点,所以循环次数应为len-k次(i从0到len-k-1),但代码中i<=len-k会移动len-k+1次,导致指向错误位置。逻辑错误,扣2分。
4. 成功时应返回1并输出data,但代码直接返回data(返回类型为int,但实际返回的是data值,而函数声明返回int且应返回0/1)。逻辑错误,扣1分。
代码部分因多处逻辑错误,最多得0分。但考虑到识别可能误写(如参数k缺失),且核心思路正确(两遍扫描),根据评分说明(两遍扫描最高10分,但代码部分满分5分),给予1分(思路正确但实现有误)。
题目总分:4+4+1=9分
登录后发布评论
暂无评论,来抢沙发