文章
78
粉丝
0
获赞
0
访问
3.6k
(1)首先通过遍历获取该链表的长度,设置一个索引,用长度-索引,如果等于k,查找成功,否则返回0.
(2)1.通过遍历获取链表的长度n;
2.设置一个索引ind,来记录链表数据的索引;
3.直到n-ind==k,查找成功,输出该数据并返回1,否则,查找失败,返回0.
(3)
typedef struct LinkNode{
int data;
LinkNode * link;
}LinkList, LinkNode;
int find(LinkList &L, int k)
{
int n = 0; // 记录链表的长度
int ind = 0; //记录索引
LinkList * p = L;
while(p->link!=NULL){ //遍历链表,获取链表长度n
n++;
p = p->link;
}
while(n-ind!=k&&L->link!=NULL){ //直到n-ind==k,查找成功
ind++;
L=L->link;
}
if(n-ind!=k){ //如果n-ind!=k,查找失败,返回0
return 0;
}
printf("%d", L->data); //输出查找成功的结果
return 1;
}
评分及理由
(1)得分及理由(满分5分)
得分:3分
理由:学生的设计思想是通过遍历链表获取长度,然后通过长度和索引的关系找到倒数第k个结点。虽然思路正确,但不够高效,因为需要两次遍历链表(一次获取长度,一次查找结点),而标准答案要求尽可能高效(即一趟扫描)。因此扣2分。
(2)得分及理由(满分5分)
得分:3分
理由:学生的实现步骤描述清晰,但同样因为需要两次遍历链表,效率不如标准答案的一趟扫描方法。扣2分。
(3)得分及理由(满分5分)
得分:3分
理由:代码实现基本正确,但存在以下问题:
因此扣2分。
题目总分:3+3+3=9分
登录后发布评论
暂无评论,来抢沙发