輸入乙個單向鍊錶,輸出該鍊錶中倒數第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...