1.双指针方法 一次遍历
cur = cur.next; 之前一定要判断 cur是否为空
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pHead ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode FindKthToTail (ListNode pHead, int k) { ListNode pre = pHead; ListNode cur = pHead; while(k>0&&cur!= null){ cur = cur.next; k--; } if(cur==null && k != 0) return null; while(cur != null){ pre = pre.next; cur = cur.next; } return pre; } }
2.遍历两次的方法
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pHead ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode FindKthToTail (ListNode pHead, int k) { int len = 0; ListNode cur = pHead; while(cur!=null){ cur = cur.next; len++; } cur = pHead; if(len<k) return null; int target = len-k; while(target>0){ cur = cur.next; target--; } return cur; } }