輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。
思路:設定兩個指標,乙個指標從鍊錶第乙個結點開始,另乙個指標從第k個結點開始,兩個指標同時走,當第二個指標到達鍊錶尾時,第乙個指標指向倒數第k個結點。
考慮特殊情況:鍊錶長度小於k,那麼返回空。
btw,通過測試,倒數第0個結點看做鍊錶的最後乙個結點。
1/*2struct listnode 8};
*/9class
solution
19return cnt < k ? null : res;
*/20
int cnt = 0;21
while (tmp != null && (cnt 25while (tmp !=null)
29return cnt < k ?null : res;30}
31 };
更新:根據劍指offer原書,最後乙個節點,k=1,因此無符號整型k==0是要排除。
1/*2struct listnode 8};
*/9class
solution
15int cnt = 0
;16 listnode *low = plisthead, *fast =plisthead;
17while (fast != nullptr && cnt 21while (fast !=nullptr)
25return cnt == k ?low : nullptr;26}
27 };
思路:設定快慢指標,快指標每次走兩步,慢指標每次走一步。
1 listnode* findmidnode(listnode*plisthead)5 listnode *low = plistnode, *fast =plistnode;
6while (fast->next != null && fast->next->next !=null)
10return
low;
11 }
《劍指offer》 鍊錶中倒數第k個結點
題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點.這種考題是比較簡單的一種,以前也碰到過類似的題目,從耗時來說,一般都是使用兩個指標,一前一後的走,中間間隔k或者k 1個步長,這個視判斷語句而定。當前乙個指標走到末端時,後乙個指標正好落在倒數第k個節點處,直接返回該節點。code public c...
劍指offer 鍊錶中倒數第K個結點
輸入乙個鍊錶,輸出該鍊錶中倒數第k 個結點。從 1開始計數,即該鍊錶的尾節點是倒數第乙個結點。思路 一 鍊錶是單向鍊錶,只能從頭結點往後依次遍歷,倒數第k 個結點,也就是從頭結點開始的 n k 1 個結點。但是需要先遍歷一遍得到鍊錶長度,然後在找第 n k 1的k 結點。二 1 方法一需要對鍊錶進行...
劍指Offer 鍊錶中倒數第k個結點
輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。分析 兩個指標,先讓第乙個指標和第二個指標都指向頭結點,然後再讓第一指標走 k 1 步,即到達第k個結點。然後兩個指標同時開始向後移動,當第乙個指標到達最後的結點時候,第二個結點所在位置就是倒數第k個結點了。author zy date 2017年10月3日...