鍊錶中倒數第k個結點

2021-08-14 08:41:22 字數 623 閱讀 6422

題目:輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1,2,3,4,5,6。這個鍊錶倒數第3個結點是值為4的結點

分析:如果鍊錶有n個結點,倒數第k個結點,就是第n-k+1個結點。

最直接的辦法就是直接遍歷鍊錶,第一次統計出煉表中結點的個數n,第二次找到鍊錶的第n-k+1個結點,便是倒數第k結點。這樣的解法需要遍歷鍊錶兩次。

遍歷鍊錶一次的解法:使用兩個指標來遍歷鍊錶,p1,p2,初始化為指向鍊錶的頭指標。p1先移動,當p1移動到第k個結點。p1和p2同時移動,p1和p2兩個指標的距離是保持不變的k-1。當p1指向了尾指標了,p2剛好指向倒數第k個指標。

測試用例:

功能測試(第k個結點在鍊錶的中間,第k個結點在鍊錶的頭結點,第k個結點在鍊錶的尾結點)

特殊測試(煉表頭結點為null指標,鍊錶的結點總數少於k,k等於0)

**如下:

struct listnode

listnode* findkthtotail(listnode* plistnode,unsigned int k)

while(p1->m_pnext!=null)

return p2;

}

鍊錶中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為兩個整數n和k 0 n k 1000 n代表將要輸入的鍊錶元素的個數,k代表要查詢倒數第幾個的元素。輸入的第二行包括n個數t 1 t 1000000 代表鍊錶中的元素...

鍊錶中倒數第k個結點

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。分析 對於此題,考慮單鏈表實現,單鏈表只能從頭到尾遍歷,而要找到倒數第k個結點,就需要確定,正數是第幾個結點,假設結點總數為n,最後乙個結點位置為n 1,而倒數第k個結點的位置就為n k 1,如果從頭節點開始遍歷,只要遍歷到n k 1步就可以,這就意味...

鍊錶中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。思路一 設定兩個指標pre和last,先讓pre移動k 1步,如果此時pre為空,則k 鍊錶長度,返回null,否則讓pre和last同時移動。步驟為 pre pre.next if pre null 若為真,進入 否則進入 last last.n...