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) { // write code here // 算法的时间复杂度O(N),额外空间复杂度O(1) // 1.遍历一遍链表,得到总共有几个结点 if (pHead == null) { return null; } // 确保至少有一个结点 int num = 0; ListNode cur = pHead; while (cur != null) { num++; cur = cur.next; } // 2.总结点数 - k,得到第二次遍历的索引 int index = num - k; ListNode result = null; // 3.返回索引处的结点 if (index < 0) { // 3.1 index < 0 - 说明链表长度不够 result = null; } else if (index == 0) { // 3.2 index = 0 - 正好需要整个链表 result = pHead; } else { // 3.2 index > 0 - 找到index处的结点的下一个,可以直接返回 cur = pHead; for (int i = 0; i < index; i++) { cur = cur.next; } result = cur; } return result; } }