文章
352
粉丝
0
获赞
0
访问
33.1k
(1)采用双指针遍历的算法
(2)设两个变量i和j,初始时均指向链表的头结点,一个计数变量count,j先开始遍历,count随着加一,当count=k-1时,i开始遍历,当j指向结点的next为null时,遍历结束,若i仍指向头结点,表示查找失败,返回0,否则,i指向的结点即为倒数第k个位置上的结点,输出其data值,再返回1
(3)
int func(LinkList L, int k) {
LNode *i = L;
LNode *j = L;
int count = 0;
while(j->next != NULL){
j = j->next;
count++; //count随j遍历而递增
if(count >= k-1) i = i->next; //当count=k-1时,i开始遍历
}
if(i == L) return 0; //若i仍指向头结点,表示查找失败
else printf("%d",i->data);
return 1;
}
评分及理由
(1)得分及理由(满分5分)
得分:3分
理由:学生描述了双指针遍历的基本思想,与标准答案思路一致。但是描述不够详细和准确,没有明确说明两个指针的初始位置(应该是头结点的下一个结点),也没有清晰说明两个指针的移动时机关系。基本思想正确但表述不够完整。
(2)得分及理由(满分5分)
得分:3分
理由:学生给出了实现步骤,但存在逻辑问题:①初始位置描述不准确(应该是头结点的下一个结点);②count从0开始计数,但判断条件是count=k-1时i开始移动,这个逻辑会导致结果错误;③没有考虑k值超过链表长度的情况判断不完整。
(3)得分及理由(满分5分)
得分:2分
理由:代码实现存在以下逻辑错误:
- 指针初始位置错误:应该指向list->link而不是list
- 移动时机错误:count>=k-1的判断条件会导致结果错误
- 边界判断错误:用i==L判断失败条件不正确
- 没有正确处理k值超过链表长度的情况
虽然代码结构基本正确,但核心逻辑存在多处错误。
题目总分:3+3...
登录后发布评论
暂无评论,来抢沙发