题目描述
输入一个链表,输出该链表中倒数第k个结点。
如果该链表长度小于k,请返回空。
方法一 :返回正数len+1-k
方法二: 双指针解法
/*
初始:快慢指针都等于head
准备:快指针前进k,慢指针前进1
过程:快慢指针分别前进1,faster.next=null时,慢指针所指向的就是倒数第k个结点,
返回慢指针
*/
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
//方法一
// public ListNode FindKthToTail (ListNode pHead, int k) {
// int count =0;
// ListNode temp = pHead;
// int len = leng(pHead);
// if(len<k||k==0)
// return null;
// while(temp!=null){
// count++;
// if(count==len+1-k){
// // temp.next = temp.next.next;
// // break;
// return temp;
// }
// temp = temp.next;
// }
// return pHead;
// }
// public int leng(ListNode pHead){
// int len =0;
// while(pHead!=null){
// len++;
// pHead=pHead.next;
// }
// return len;
// }
/*
双指针法
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
ListNode lennode = pHead;//链表长度统计的指针
ListNode faster = pHead;
ListNode slower=pHead;
int len=0;
while(lennode!=null){//链表长度计算
len++;
lennode=lennode.next;
}
if(len==k)//链表长度=k
return pHead;
if(k==0||len==0||len<k)//链表为空,k<1( k从1开始),链表长度<k
return null;
while(k!=0&&faster.next!=null){
faster=faster.next;
k--;
}
/*
初始:快慢指针都等于head
准备:快指针前进k,慢指针前进1
过程:快慢指针分别前进1,faster.next=null时,慢指针所指向的就是倒数第k个结点,
返回慢指针
*/
slower=slower.next;
while (faster.next!=null){
slower=slower.next;
faster=faster.next;
}
return slower;//faster.next==null,返回慢指针
}
}