链表中倒数第k个节点
链表中倒数最后k个结点
https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9?tpId=295&tqId=1377477&ru=/exam/company&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Fcompany
> 链表中倒数第k个节点
图解
思路:
1.先设置两个指针,一个快指针fast和一个慢指针slow,都赋值为表头的地址
2.先让fast进行移动n位,注意这里需要进行特判一下,是否链表的长度小于n,如果是,那么就返回0
3.否则让fast和slow指针同步进行移动,直到fast为nul时,此时slow就是倒数第n个节点
代码:
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
public ListNode FindKthToTail (ListNode pHead, int k) {
//定义两个指针:快指针fast和慢指针slow,都先指向表头
ListNode fast=pHead;
ListNode slow=pHead;
//先将fast指针移动k个节点,判断一下如果fast=null,那么表示该表的的长度不足k,就返回0
for(int i=1;i<=k;i++){
if(fast==null){
return slow=null;
}else{
fast=fast.next;
}
}
//接下来就让fast和slow指针同步移动,当fast移动到null的时候就结束
//此时返回的slow节点就是倒数第k个节点
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
return slow;
}
}