文章

100

粉丝

0

获赞

0

访问

10.6k

头像
2019年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月23日 21:10
阅读数 56

(1)算法思想:找到线性表的指向最后一个元素的尾指针,头指针为指向第一个元素的指针,头指针依次向后走,尾指针依旧指向最后一个元素,每走到一个元素,就将头指针指向的元素的next指针指向尾指针,该尾指针的next指针指向头指针指向的元素的后一元素,如果元素个数为奇数,则直到头指针等于尾指针结束,如果为偶数,则直到头指针的后一元素等于尾指针结束。

(2)NODE* find(NODE *L, int n){ //找到对应位置n的指针

int i = 1;

NODE * p = L->next;

while(i!=n&&p!=NULL){

i++;

p=p->next;

}

return p;

}

void f(NODE * L,int n){

NODE *p = L->next; //声明头指针

NODE *r = find(L,n); //声明尾指针

if(n%2==0){

while(p->next==r){

r->next = p->next;
p->next = r;
NODE* s = find(L,n);
s->next = NULL;
p = r->next;
r = s;

}

}else{

while(p!=r){

r->next = p->next;
p->next = r;
NODE* s = find(L,n);
s->next = NULL;
p = r->next;
r = s;

}

}

}

(3)时间复杂度:O(nlogn)


评分及理由

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

得分:0分

理由:学生描述的基本设计思想存在明显错误。算法试图通过头尾指针交替连接,但未正确说明如何找到尾指针(每次通过find函数遍历链表,效率低下),且未考虑链表反转的必要步骤。标准答案要求先找到中点、反转后半部分再合并,而学生方法未涉及反转操作,直接连接会导致链表断裂或逻辑错误。因此,基本设计思想不符合题目要求,无法得分。

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

得分:0分

理由:学生代码存在多处逻辑错误:
...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发