import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
LinkedList<ListNode> l=new LinkedList<>();
while(pHead!=null){
l.addLast(pHead);
pHead=pHead.next;
}
ListNode ans=null;
for(int i=k;k>0;k--){
if(!l.isEmpty())
ans=l.removeLast();
else
return null;
}
return ans;
}
}
就是用一个栈就可以了
方法二:
快慢指针
快指针先走k步,然后慢指针走,快指针到头的时候,慢指针是倒数第k个
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
if(k==0)return null;
ListNode fast=null,slow=null,begin=pHead;
for (int i=0;i<k;i++){
fast=pHead;
if(pHead==null)
return null;
pHead=pHead.next;
}
slow=begin;
while(fast!=null){
fast=fast.next;
if(fast==null)
return slow;
else
slow=slow.next;
}
return slow;
}
}
还要考虑到k=0的情况下
应该返回空