文章

296

粉丝

0

获赞

0

访问

21.4k

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

答:(1)遍历整个链表,用length变量记录整个链表的长度,得到链表长度length后,依次循环访问链表的每一个结点,每次循环用i记录访问到了第几个结点,当i==length-k+1,即访问到了第(length-k+1)个结点时,访问的该结点即是链表中导数第k个位置上的结点。

(2)1.用一个for循环遍历链i表,获得链表长度length;

           2.判断k是否合法,若k>length,则不合法,直接返回0,退出函数。

           2.再使用一个for循环,依次访问链表的结点。i初始为1,每循环一次,i加1,当i>length-k+1时,退出循环。返回第k个结点的数据域。

(3)

#define MaxSize 1000

typedef struct LNode{

int data;

struct LNode *link;

}LNode,*List;

int find_k(LNode list,int k){

int i=0;

int length=0;

LNode p=list;

for(i=0;i<MaxSize&&p->link!=NULL;i++)

p=p->link;

length++;

}

if(k>length){

return 0;

}

p=list;

for(i=1;i<=(length-k+1);i++){

p=p->link;

}

return p->data;

}


评分及理由

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

得分:2分

理由:学生的设计思想是遍历链表两次,第一次计算链表长度,第二次找到倒数第k个节点。虽然思路正确,但题目要求"尽可能高效的算法",标准答案采用一遍扫描的方式明显更高效。学生的方案需要遍历链表两次,效率较低,未能达到题目对效率的要求。因此扣3分。

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

得分:3分

理由:学生详细描述了两次遍历的实现步骤,逻辑清晰。但在步骤描述中存...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发