文章

78

粉丝

0

获赞

0

访问

3.6k

头像
2009年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年7月26日 10:59
阅读数 69

(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分

理由:代码实现基本正确,但存在以下问题:

  • 代码中存在中文标点符号(如分号“;”),可能导致编译错误。
  • 链表遍历时修改了头指针L(L=L->link),违反了题目“不改变链表”的要求。
  • 效率问题(两次遍历)。

因此扣2分。

题目总分:3+3+3=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发