题目描述
emm,题目很简单,返回给定链表的倒数第k个节点
解题思路
这其实有多种解法,比如你可以先算出链表的总长度n,然后因为求的是倒数第k个节点,那也就是说求得是正数第n-k+1(经过n-k个指针);这种解法时间复杂度最坏情况下是O(2n)。
第二种思路是使用快慢指针,快指针先走k步,然后快慢指针一同走,每次走一步。等到快指针为null的时候,返回慢指针所在的位置。慢指针所在的位置就是倒数第k个节点。
注意判断指针为null的情况。
代码实现
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0){
return null;
}
//声明快慢指针
ListNode slow=head,fast=head;
//快指针先走k步
while(k--!=0){
if(fast!=null){
fast=fast.next;
}else{
//注意提前为空的情况
return null;
}
}
//快慢指针一起走
while(fast!=null){
slow=slow.next;
fast=fast.next;
}
//返回慢指针所在位置
return slow;
}
}