文章
14
粉丝
0
获赞
0
访问
506
1.基本思想:用快慢指针p和q,先让q往后遍历k次,然后p和q再同时遍历知道q到链表尾时,输出p的值即可
2.详细实现步骤:先让快指针q和慢指针p指向头指针list,然后q开始往后遍历,遍历的同时再用count计数,当count的值等于k时,可以让p和q一起往后遍历,直到q遍历结束,那么此时p指针指向的data就是倒数第k个;如果链表的长度小于k,那么p会没有向后遍历,根据count和k的比较判断返回1还是0即可
3.详细实现步骤
int findLastK(ListNode* list,int k){
ListNode *p=list;
ListNode *q=list;
int count=0;
while(q!=NULL){
q = q.link;
count++;
if(count>=k){
p = p.link;
}
}
if(count>=k){
System.out.print(q.data);
return 1;
}else{
return 0;
}
}
评分及理由
(1)得分及理由(满分5分)
得分:5分
理由:学生的基本设计思想描述清晰,与标准答案一致。使用快慢指针,先让快指针移动k次,然后两个指针同步移动,当快指针到达链表尾部时,慢指针指向倒数第k个结点。这是一趟扫描的高效算法。
(2)得分及理由(满分5分)
得分:4分
理由:学生的实现步骤描述基本正确,但存在一处不准确:当count等于k时才开始让p和q一起移动,而学生描述为"当count的值等于k时",实际代码中是count>=k时p就开始移动。不过核心思路正确,扣1分。
(3)得分及理由(满分5分)
得分:3分
理由:代码实现存在几个问题: 1. 在输出时误用了q.data而不是p.data(逻辑错误,扣1分) 2. 使用了Java的System.out.print但函数声明是C++风格(语言混用,扣0.5分) 3. 函数参数使用了中文逗号(识...
登录后发布评论
暂无评论,来抢沙发