劍指offer第14題:
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
理解:
想找到倒數第k個結點。用兩個指針,先讓一個指針走(k-1)步,然後兩個指針再一起走。當先走的指針到達了末尾的時候,後走的slow指針指向的結點就是倒數第k個結點。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k <= 0){ //考慮全面特殊情況
return null;
}
ListNode fast = head;
ListNode slow = head;
while(k-1 > 0){ //注意是k-1
if(fast.next != null){ //要保證下一個不爲空
fast = fast.next;
k--;
}else{
return null;
}
}
while(fast.next != null){ //要保證下一個不爲空
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
#####知識點:
- 指針;
- 雙指針;
- 快慢指針;
- while與if的嵌套應用