文章

352

粉丝

0

获赞

0

访问

33.1k

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

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发