鏈表中倒數第K個結點


問題:給定鏈表,輸出鏈表中倒數第K個節點

思路:
相當於用一把長度為K的尺子,尺子頭部與鏈表頭對齊,
每次移動一個單位距離,當尺子尾部與鏈表尾部對齊時,尋找的節點即為尺子頭部對准的節點



即:構造兩個節點p&q,令p指向第一個節點,q指向第k個節點,
同時移動p&q,直到q指向鏈表最后一個節點,此時倒數第K個節點即為p


LNode* FindKthToTail(LNode *Head, int k) {
    if(Head == NULL || k <= 0) return NULL;   //不合法情況:鏈表為空 or k小於等於0
    
    LNode *p, *q;   //構造兩個結點,都指向Head
    p = q = Head;  
    
    for(int i = 1; i < k; i ++) {    //另結點q指向第k個結點(尺子長度為k)
        if(q->next == NULL) return NULL;   //不合法情況:k大於鏈表長度
        q = q->next;
    }

    while(q->next) {   //同時移動兩個結點,直至q指向鏈表最后一個結點
        p = p->next;
        q = q->next;
    }

    return p;   //p即為倒數第k個結點
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com