華為OJ 輸出單向鍊錶中倒數第k個結點

2021-07-03 23:04:54 字數 1160 閱讀 5630

輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點,鍊錶的倒數第0個結點為鍊錶的尾指標。

鍊錶結點定義如下:

struct listnode

int       m_nkey;

listnode* m_pnext;

詳細描述:

介面說明

原型:listnode* findkthtotail(listnode* plisthead, unsignedint k);

輸入引數:

listnode* plisthead  單向鍊錶

unsigned int k  倒數第k個結點

輸出引數(指標指向的記憶體區域保證有效):

無返回值:

正常返回倒數第k個結點指標,異常返回空指標

#include using namespace std;

typedef struct  node

node, linklist;

//為了得到倒數第k個結點,很自然的想法是先走到鍊錶的尾端,再從尾端回溯k步。

//可是輸入的是單向鍊錶,只有從前往後的指標而沒有從後往前的指標。

//在遍歷時維持兩個指標,第乙個指標從鍊錶的頭指標開始遍歷,在第k-1步之前,第二個指標保持不動;在第k-1步開始,

//第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k-1,

//當第乙個(走在前面的)指標到達鍊錶的尾結點時,第二個指標(走在後面的)指標正好是倒數第k個結點。

linklist *buildlist( int m)

}else

return t;

}linklist* findkthtotail_solution2(linklist *plisthead, unsigned int k)

}pbehind = plisthead;

// the distance between pahead and pbehind is k

// when pahead arrives at the tail, p

// behind is at the kth node from the tail

while (pahead->next!= null)

return pbehind;

}int main()

華為oj 輸出單向鍊錶中倒數第k個結點

終於到這道題了,這是俺們那年考研資料結構最後一道題!思路 設定相距為k的兩個指標,當後乙個指標指向null 時,前面的指標就指向了倒數第k個,程式如下 include using namespace std struct listnode int main cin k p q head m pnex...

華為OJ 初級 輸出單向鍊錶中倒數第k個結點

輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點,鍊錶的倒數第0個結點為鍊錶的尾指標。鍊錶結點定義如下 struct listnode 詳細描述 介面說明 原型 listnode findkthtotail listnode plisthead,unsignedint k 輸入引數 listnode p...

輸出單向鍊錶中倒數第k個結點

描述 輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點,鍊錶的倒數第0個結點為鍊錶的尾指標。鍊錶結點定義如下 struct listnode 詳細描述 介面說明 原型 listnode findkthtotail listnode plisthead,unsignedint k 輸入引數 listnod...