輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點
【**魯棒性】
要考慮一些異常情況
【思路】
方法一:兩次遍歷
首先判斷一下鍊錶為空或k為0的特殊情況。
遍歷第一遍,確定鍊錶長度。
判斷k是否異常,即超過鍊錶長度。
遍歷第二遍,找出目標結點。
方法二:雙指標
首先判斷一下異常情況。
兩個指標,第乙個指標pahead先走k-1步,然後兩個指標再一起走。當第乙個指標到達結尾時,第二個指標剛好在第k個結點。
k超過鍊錶長度的異常情況,在第乙個指標走k-1步的過程中,當pahead未遍歷完k-1步就到達了鍊錶尾,則說明k超過鍊錶長度,返回null。
方法二:
public listnode findkthtotail_v2
(listnode head,
int k)
pbehind = head;
while
(pahead.next!=null)
return pbehind;
}
想同型別題目,返回乙個單向鍊錶的中間結點。奇數個結點則返回最中間的,偶數個隨便返回中間兩個的任意乙個。
方法:同樣是雙指標,乙個每次走一步,乙個每次走兩步。則當第二個走到鍊錶尾時,另乙個剛好到中間。
《劍指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日...