publicstatic ListNode findKthToTail(ListNode root, int k){ if (root == null || k <= 0) { returnnull; }
ListNode ahead = root; ListNode after = root;
// 第一个指针先走 k - 1 步,如果链表的长度小于 k ,则返回 null for (int i = 0; i < k - 1; i++) { if (ahead.next == null) { returnnull; } ahead = ahead.next; }
// 二者同时走,当第一个指针到达尾节点,第二个指针到达倒数第 k 个节点 while(ahead.next != null) { ahead = ahead.next; after = after.next; }
return after; }
publicstaticvoidmain(String[] args){ ListNode root = new ListNode(1); root.next = new ListNode(2); root.next.next = new ListNode(3); root.next.next.next = new ListNode(4);