劍指Offer 鍊錶中倒數第k個節點

2022-01-12 14:52:47 字數 1251 閱讀 1067

劍指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日...