文章
13
粉丝
0
获赞
0
访问
1.2k
(1)用双指针遍历,p从头开始移动到k时,q开始移动,p遍历完后q的位置就是倒数第k个节点位置。如果不足k节点额外处理。
(2)p,q=list,count=0;
p=p->next,count++,如果p为空判断 count===k,输入q->data; return 1; else return 0;
(3)
typedef struct LinkNode{
ElemType data;
LinkNode *link;
}LinkNode, *LinkList;
int findk(LinkList L , int k){
LinkNode *p = L->link, *q = L->link;
int count=0;
for(;p!=NULL;p=p->link){
count < k ? count++ : q = q->link;
}
if (count < k) return 0;
else{
cout << q->data;
return 1;
}
}
评分及理由
(1)得分及理由(满分5分)
学生描述了双指针遍历的基本思想:p从头开始移动,当p移动到第k个节点时q开始移动,p遍历完后q的位置就是倒数第k个节点。这与标准答案的设计思想一致,但未明确说明初始时p和q指向第一个结点(表头结点的下一个结点),且未提及对k值超过链表长度的处理。扣1分。
得分:4分
(2)得分及理由(满分5分)
学生给出了实现步骤,但描述过于简略且存在错误:步骤中"p=p->next,count++"的写法不完整(未体现条件判断),且未说明q指针何时开始移动(标准答案中当count等于k时q才开始移动)。步骤描述缺乏清晰的分步逻辑,且未涵盖全部必要步骤(如p为空时的处理)。扣3分。
得分:2分
(3)得分及理由(满分5分)
代码实现基本正确,但存在以下问题: 1. 类型定义中使用了"LinkNode"和"LinkList",但未正确定义LinkList为指针类型(标准答案使用typedef struct LNode *LinkList)。 2. 代码中使用了C++的cout输...
登录后发布评论
暂无评论,来抢沙发