文章

14

粉丝

0

获赞

0

访问

506

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

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. 函数参数使用了中文逗号(识...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发