文章
100
粉丝
0
获赞
0
访问
10.6k
(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分
理由:学生代码存在多处逻辑错误:
...
登录后发布评论
暂无评论,来抢沙发