题目描述

输入一个链表,输出该链表中倒数第k个结点。

一、方法一

一、分析

快慢(双)指针
image.png

二、代码

  1. public ListNode FindKthToTail(ListNode head,int k) { //5,{1,2,3,4,5}
  2. ListNode p, q;
  3. p = q = head;
  4. int i = 0;
  5. for (; p != null; i++) {
  6. if (i >= k)
  7. q = q.next;
  8. p = p.next;
  9. }
  10. return i < k ? null : q;
  11. }

二、方法二

一、分析

简单粗暴,目的是找的倒数第k个对应的顺数是第几个

二、代码

  1. public static ListNode FindKthToTail(ListNode head,int k) {
  2. ListNode node = head;
  3. int count=0;
  4. if(head == null||k<=0)
  5. {
  6. return null;
  7. }
  8. while(head!=null)
  9. {
  10. head = head.next;
  11. count++;
  12. }
  13. if(k>count)
  14. {
  15. return null;
  16. }
  17. for(int i = 0;i<count-k;i++)
  18. {
  19. node = node.next;
  20. }
  21. return node;
  22. }