查詢鍊錶中倒數第k個結點

2022-03-30 23:14:09 字數 870 閱讀 4637

題目:輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點。鍊錶的倒數第0個結點為鍊錶的尾指標。鍊錶結點定義如下:

struct listnode

;兩個方法,第乙個先遍歷,獲得鍊錶總共的長度,這樣就知道從head到達倒數第k個需要移動多少次,從頭在移動一遍。

第二個,兩個指標,第二個比第乙個多移動k次之後,兩個指標再一起移動,這樣兩個指標之間始終有k個距離,當第二個指標移動到null的時候,第乙個指標所指向的就是倒數第k個。**如下:

template struct

listnode

;void createlist(listnode* &phead)

}void destorylist(listnode*phead)

delete phead;

phead =null;

return;}

//找到倒數第k個節點,最後乙個節點為倒數第乙個

listnode* findkthtail1(listnode* phead, int

k) assert(length>=k);

p =phead;

//在從頭移動 length-k次就好了

for(int i=0; i)

p = p->next;

returnp;}

//用兩個指標,第二個比第乙個多移動k次,這樣在第二個到達null的時候

//第乙個正好在倒數第k個

listnode* findkthtail2(listnode*phead, int

k) assert(i==k);

while(p2!=null)

return

p1;}

intmain()

查詢鍊錶中倒數第k個結點

輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點。鍊錶的倒數第0個結點為鍊錶的尾指標。鍊錶結點定義如下 struct listnode 分析 為了得到倒數第k個結點,很自然的想法是先走到鍊錶的尾端,再從尾端回溯k步。可是輸入的是單向鍊錶,只有從前往後的指標而沒有從後往前的指標。因此我們需要開啟我們的思路...

查詢鍊錶中倒數第k個結點

定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二個指標 走在後面的 指標正好是倒數第k個結點。includeusing namesp...

查詢鍊錶中倒數第k個結點

include using namespace std typedef struct lnodelnode,linklist void initlist linklist l void createlist r linklist l,int n return void show linklist l...