劍指offer:鍊錶中倒數第k個節點
題目描述:
輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。
解題思路:
因為是單鏈表,進行遍歷時,無法向後再進行返回,所以不能移動到鍊錶尾部再返回,而且增加了時間複雜度,多移動了k次;
鍊錶從1開始計數,知道總的鍊錶長度n
,給定倒數第k
個,那麼鍊錶移動n-k
次。
在進行計算鍊錶總長度時,由於再nodesize=nodesize->next;
最後乙個鍊錶再向後移動乙個,並且n多加了一次之後再跳出迴圈,所以n從0開始計數。
最後返回頭指標。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
size = n-k;
while
(head && size)
return head;}}
;
/*遞迴
*先一直遞迴到鍊錶尾部,再返回
*定義位置變數 pospos ,每次函式返回時 pos++pos++
*當 pos == kpos==k 時,說明此時遞迴函式位於第 kk 個結點位置,返回該結點
*/class
solution
listnode* ret =
getkthfromend
(head-
>next, k)
; pos++;if
(pos == k)
return ret;}}
;/*快慢指標:
*定義兩個指標,快指標 fastfast, 慢指標 lowlow .
*讓 fastfast 先向前移動 kk 個位置,然後 lowlow 和 fastfast 再一起向前移動 .
*當 fastfast 到達鍊錶尾部,返回 lowlow .
*/class
solution
else
}return low;}}
;
《劍指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日...