1囤耳、設(shè)兩個(gè)指針slow和quick,當(dāng)i<k-1 時(shí)slow移動(dòng),quick不動(dòng)充择。當(dāng)i>=k-1 時(shí)quick也開(kāi)始同頻率移動(dòng)德玫;
2、當(dāng)slow移動(dòng)到正序第k個(gè)椎麦,quick移動(dòng)到正序第一個(gè)宰僧;
3、當(dāng)slow移動(dòng)到倒序第一個(gè)观挎,quick移動(dòng)到 倒序第k個(gè)琴儿;
4、return quick
* 題目:給出鏈表 {1,2,3,4,5,6,7}嘁捷,輸出倒序第5個(gè)
* 當(dāng)slow移動(dòng)到5造成,quick移動(dòng)到1
* 當(dāng)slow移動(dòng)到7,quick移動(dòng)到3(倒數(shù)第5個(gè))
* 1 2 3 4 5 6 7
* q s # 開(kāi)始時(shí)slow=5;quick=1
* q s # 結(jié)束時(shí)show+2=7;quick+2=3
注意:
- 輸入鏈表不能為空雄嚣;
- k不大于鏈表長(zhǎng)度晒屎;
class NodeList{
int val;
NodeList next = null;
NodeList(int val){
this.val = val;
}
}
public class Solution{
public ListNode FindKthTotail(ListNode head, int k){
# 鏈表不為空
if(k == 0 || head == null){
return null;
}
ListNode temp = head;
# 鏈表長(zhǎng)度不小于 k-1,頭結(jié)點(diǎn)已經(jīng)驗(yàn)證過(guò)了
for(int i = 0; i < k-1; i++){
if(temp.next != null){
temp = temp.next;
}else{
return null;
}
}
ListNode quick = head;
ListNode slow = head;
#當(dāng) i < k-1 時(shí)缓升,slow 指針動(dòng)鼓鲁,quick 指針不動(dòng);
for(int i = 0; i < k-1; i++){
slow = slow.next;
}
while(slow.next!=null){
slow=slow.next;
quick=quick.next;
}
return quick;
}
}