[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 }