文章

79

粉丝

0

获赞

0

访问

3.4k

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

1)使用两个指针*p和*q,因为不知道链表长度,先将q向前移动k位,后面的p和q则同步每次向后移动一位结点。当q达到最后一个结点的时候,p指向的则是倒是第k个结点。

2)

1. 创建两个指针p和q,q用来先遍历,p用来指向倒数第k个。

2. 用循环先让q向前k步,如果q在走k步前就结束了,说明这个链表长度小于k,直接返回0表示失败。然后后面再一个循环,当q->link不为空的时候,p和q同时向后。

3. 当q->link为空,遍历结束。p指向的就是倒数第k个。取出那个结点的值并输出,返回1.

3)

int searchK(LList &list, int K){
    LNode *p=list->link, *q=list->link;
    
    for(int i = 0; i<k; i++){    //前进k步
        if(q) q=q->link;
        else return 0;
    }
    while(q){
        p=p->link;
        q=q->link;
    }
    printf("%d",p->data);
    return 1;

}

评分及理由

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

得分:5分

理由:学生的基本设计思想描述清晰准确,与标准答案一致。使用两个指针,先让一个指针移动k步,然后两个指针同步移动,当先移动的指针到达末尾时,后移动的指针正好指向倒数第k个结点。思路正确且高效,只进行一趟扫描。

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

得分:5分

理由:学生的详细实现步骤描述完整,逻辑清晰。包括:创建两个指针、先移动q指针k步、检查链表长度是否足够、同步移动p和q指针直到q到达末尾、最后输出结果。步骤描述与标准答案本质相同,只是表述方式略有差异。

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

得分:4分

理由:代码实现基本正确,但有1处逻辑错误:在while循环中,当q为NULL时,p指向的是倒数第k个结点的前一个结点,而不是倒数第k个结点。这是因为在同步移动时,当q指向最后一个结点时,q->link为NULL,但此时p还没有移动到正确位置。应该修改为...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发