輸入一個(gè)鏈表,輸出其倒數(shù)第k個(gè)節(jié)點(diǎn)

1、設(shè)兩個(gè)指針slow和quick,當(dāng)i<k-1 時(shí)slow移動(dòng),quick不動(dòng)。當(dāng)i>=k-1 時(shí)quick也開始同頻率移動(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        # 開始時(shí)slow=5;quick=1
 *     q       s    # 結(jié)束時(shí)show+2=7;quick+2=3

注意:

  1. 輸入鏈表不能為空;
  2. 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)證過了
        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;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容