题目描述:
输入一个链表,输出该链表中倒数第k个节点。
示例描述:
输入: 1,{1,2,3,4,5} 返回值:{5}
个人理解:
- 该题首先要判断head是否为null的情况以及k的合法性{这里如果用k<=0||k>size()认定输入的k不合法的话,会遍历这个链表两遍,我们为了提高效率一般是禁止遍历链表两遍的,所以我们在fast走k-1步的那个循环里加个判断条件,如果不满足条件就不让fast继续走下去了,return null}
- 然后用fast,slow双指针,要想找倒数第k个节点,首先先让fast走k-1步,然后fast,slow再一步一步地走,这样当fast.next == null的时候,slow所在的位置就是倒数第k个节点。
题解实现:
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null){
return null;
}
if(k <=0){
System.out.println("输入的k不合法!");
return null;
}
ListNode fast = head;
ListNode slow = head;
while(k-1>0){
if(fast.next != null){
fast = fast.next;
k--;
}else {
System.out.println("没有这个节点!");
return null;
}
}
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
|