题解 | #链表中倒数最后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; //此处必须返回,为的是输出正确答案
}
}
查看14道真题和解析
字节跳动公司福利 1332人发布