文章
20
粉丝
0
获赞
0
访问
584
(1)
因为要时间上尽可能高效,所以用空间换时间。创建一个新的数组A,将L中的后半部分放进A中。再创建一个新的链表B,开始遍历链表L,插入链表B,再遍历数组A,插入链表B,然后循环,直到链表L和A的next指针指向NULL。
(2)
typedef struct node{
int data;
struct node *next;
}NODE;
void AssignList(NODE,*next){
int i=0;
while(*next!=NULL)
{
if(i>=n/2)
{
A[i]=L->data;
i+=1;
}
else
{
i+=1;
}
for(j=0;j<=n/2;j++)
{}
}
(3)
本算法用了一个n/2大小的数组,空间复杂度是O(n/2)。遍历了一次线性表L,再遍历了数组A和L表的前半部分所以时间为n/2+n/2。所以时间复杂度是O(n).
评分及理由
(1)得分及理由(满分3分)
得分:0分
理由:学生提出的算法思想使用了额外的数组来存储后半部分数据,空间复杂度为O(n),不符合题目要求的O(1)空间复杂度。虽然提到了时间高效,但基本设计思想不符合题目要求。
(2)得分及理由(满分8分)
得分:0分
理由:代码实现不完整且存在多处错误:
1. 函数参数定义错误(NODE,*next应为NODE *L)
2. 未定义变量n、A等
3. 循环条件不完整
4. 缺少链表构建和合并的关键步骤
5. 代码逻辑无法实现题目要求的重排列功能
(3)得分及理由(满分2分)
得分:0分
理由:虽然学生分析时间复杂度为O(n)是正确的,但这是基于错误的算法思想得出的结论。由于算法本身不符合题目要求,且代码实现存在严重问题,因此不能得分。
题目总分:0+0+0=0分
登录后发布评论
暂无评论,来抢沙发