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

2021-09-26 22:26:03 字數 712 閱讀 7720

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

#includeusing namespace std;

struct listnode ;

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

listnode *pahead = plisthead;

listnode *pbehind = plisthead;

for (unsigned int i = 1; i <= k - 1; i++) //unsigned是為了處理k=0,i=-1的情況

else

}while (pahead->next != null)

return pbehind;

}int main()

else

}listnode *p = head;

while (p != null)

cout << endl;

listnode *ptmp = findkthtotail(head, 3);

cout << ptmp->val << endl;

}

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

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

查詢鍊錶中倒數第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...

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

題目 輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點。鍊錶的倒數第0個結點為鍊錶的尾指標。鍊錶結點定義如下 struct listnode 兩個方法,第乙個先遍歷,獲得鍊錶總共的長度,這樣就知道從head到達倒數第k個需要移動多少次,從頭在移動一遍。第二個,兩個指標,第二個比第乙個多移動k次之後,兩個...