题解 | #链表中倒数最后k个结点#
链表中倒数最后k个结点
https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ /**此题的快慢指针使用相同时间所踏步数是一致的,区别在于,快指针先走了几步 1.对链表为空的情况进行判断,若为空则返回空 2.创建快慢指针,头节点均为pHead,并设置快指针要先走的多少步 3.在循环中对所走步数与要求数k作比较,如若fast已经为null,还需要向后走,那我们就判定k的值一定是大于原链表的长度,返回null即可; 4.若在第一个循环正常结束,那么快指针已到达目的地,也就是从头节点为起点快指针走k步,那么,此时慢指针也可以开始向后走了,且与快指针同步,等到快指针走向最后一个节点的下一个节点null值时,此时返回slow节点,即为最后的k个节点 */ public class Solution { public ListNode FindKthToTail (ListNode pHead, int k) { if(pHead == null){ return pHead; } //--------------------------------以上为第一部分---------------------------------------- ListNode fast = pHead; ListNode slow = pHead; int count = 1; //--------------------------------以上为第二部分---------------------------------------- while(count <= k){ count++; if(fast == null){ return null; }else{ fast = fast.next; } } //--------------------------------以上为第三部分---------------------------------------- while(fast != null){ fast = fast.next; slow = slow.next; } //--------------------------------以上为第四部分---------------------------------------- return slow; //此处必须返回,为的是输出正确答案 } }