[Java]剑指offer:链表中倒数第k个结点

题目描述

输入一个链表,输出该链表中倒数第k个结点。
如果该链表长度小于k,请返回空。
示例1

输入

{1,2,3,4,5},1 

返回值

{5}

思路

使用两个指针,快指针和慢指针。快指针先走k步。然后快慢指针一起走。当快指针到达尾部的时候,此时慢指针所指的结点则为倒数第k个结点。

 

 1 import java.util.*;
 2 
 3 /*
 4  * public class ListNode {
 5  *   int val;
 6  *   ListNode next = null;
 7  *   public ListNode(int val) {
 8  *     this.val = val;
 9  *   }
10  * }
11  */
12 
13 public class Solution {
14     /**
15      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
16      *
17      * 
18      * @param pHead ListNode类 
19      * @param k int整型 
20      * @return ListNode类
21      */
22     public ListNode FindKthToTail (ListNode pHead, int k) {
23         // write code here
24         if(pHead==null||k<=0){
25             return null;
26         }
27         ListNode fast = pHead;
28         while(k>1&&fast!=null){
29             fast = fast.next;
30             k--;
31         }
32         if(fast==null){
33             return null;
34         }
35         ListNode low = pHead;
36         while(fast.next!=null){
37             fast = fast.next;
38             low = low.next;
39         }
40         return low;
41     }
42 }

 

posted @ 2021-04-26 10:29  DXYE  阅读(46)  评论(0编辑  收藏  举报