文章

77

粉丝

0

获赞

0

访问

7.1k

头像
2015年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年9月22日 17:43
阅读数 92


评分及理由

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

学生答案的基本设计思想正确,即使用辅助数组记录每个绝对值出现的次数,然后遍历链表进行删除操作。思路与标准答案一致,因此得3分。

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

学生给出的单链表结点数据类型定义正确,包括data和link字段,且使用了typedef定义结构体类型。与标准答案一致,因此得2分。

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

学生代码整体思路正确,但存在以下逻辑错误:
1. 在遍历链表时,学生使用P->next != NULL作为循环条件,但内部却访问P->next->data,这可能导致空指针异常(例如当链表为空时)。标准答案使用p->link != NULL(即检查当前结点的下一个结点是否存在),而学生代码直接检查P->next,但初始时P指向头结点(假设L是头指针),因此逻辑基本正确,但细节有误。
2. 在删除结点时,学生代码P->next = P->next->next直接跳过待删除结点,但没有释放被删除结点的内存,会导致内存泄漏。标准答案中使用了free(r)来释放内存。
3. 学生代码中,当q[m] != 0时,执行删除操作后,P并没有向后移动(即P = P->next),这会导致下一次循环仍然检查同一个P->next(即新接上的结点),逻辑正确,但可能遗漏检查新结点?实际上,删除后P->next已经更新,所以不需要移动P,这一点与标准答案一致。
4. 学生代码参数使用LNode *&L(引用传递),但函数内并没有修改L本身,所以不需要引用传递;标准答案使用头结点h(指针传递)。但这不是逻辑错误,只是风格问题。
基于以上错误,扣分如下:未释放内存(扣2分),循环条件可能引发空指针问题(扣1分)。其他部分正确,因此得5分(满分8分)。

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

学生正确说明了空间复杂度为O(n)(辅助数组大小)和时间复杂度为O(n)(遍历链表)。与标准答案一致,因此得2分。

题目总分:3+2+5+2=12分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发