文章
79
粉丝
0
获赞
0
访问
3.4k
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还没有移动到正确位置。应该修改为...
登录后发布评论
暂无评论,来抢沙发