文章
109
粉丝
0
获赞
0
访问
22.8k

评分及理由
(1)得分及理由(满分3分)
学生的算法设计思想基本正确:“利用绝对值函数求出结点的绝对值,若绝对值为m,则将计数数组的值修改为1,若新结点的值在计数数组中为bool类型(已标记过),直接删去。”该思想体现了用空间换时间、一躺扫描的核心,与标准答案一致,但表述不够完善(如未明确说明数组下标范围及初始值)。故得2分。
(2)得分及理由(满分2分)
结构体定义正确,包含了data和link字段,并使用了typedef定义节点类型和指针类型。虽然写法与标准答案略有差异(类型名不同),但功能等价,没有错误。根据禁止扣分规则,此处不扣分,得2分。
(3)得分及理由(满分8分)
代码实现存在逻辑错误:
1. 在循环中,先让p = p->next,但未判断p是否为空,当访问最后一个结点时,p变为NULL,下一次循环while(p)退出,但此时在循环体内先让prev = p(即NULL),再执行p = p->next会出错(p为NULL不能取next)。这是严重越界/空指针问题。(扣3分)
2. 删除结点的操作不完整:else分支中prev->next = p->next后未释放被删除的结点,且未移动prev指针,当后续还有其他重复结点时会导致指针错乱,逻辑不严谨。(扣2分)
3. 数组初始化循环条件“i<=n+1”误写为“<=n+1”,实际应遍历到i<n+1,会导致数组越界一次。但此可能为识别误写(标准答案也是i<n+1),根据防误写扣分规则,不扣分。核心逻辑有误,因此该小题得分:8-3-2=3分。
(4)得分及理由(满分2分)
学生未作答时间复杂度与空间复杂度,该部分得0分。
题目总分:2+2+3+0=7分
登录后发布评论
暂无评论,来抢沙发