題目:輸入乙個單向鍊錶,輸出該鍊錶中倒數第
k個結點。鍊錶的倒數第
0個結點為鍊錶的尾指標。鍊錶結點定義如下:
struct
listnode;
解析:方案一:可以對單鏈表來個逆置,然後再取逆置後的單鏈表的第k個元素。但是這樣,在逆置的過程中涉及到大量的插入和刪除的工作,實為不佳的方案。
方案二:可以先求出鍊錶的長度,然後求第n-k-1個結點即可。但是這需要遍歷鍊錶兩遍,對於長度很大的鍊錶來說,不是乙個很好的方法。
方案三:尋求只需遍歷鍊錶一遍的方法。維持兩個指標p和q,p指標遍歷鍊錶,到第k-1個結點時,q開始從第1個結點開始與p一起前移,直至p指向了尾結點,那麼q便指向了倒數第k個結點。
// 8_返回單鏈表倒數第k個結點.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace std;
typedef struct node
node;
node *head = null;
void createlist()
}node * getknode(int k)
while(first->next!=null)
return second;
}void printlist()
}int _tmain(int argc, _tchar* argv)
{ createlist();
printlist();
cout<<"倒數第5個結點的值:" 思路 1.編寫乙個方法,接收head節點,同時接收乙個index 2.index表示是倒數第index個節點 3.先把鍊錶從頭到尾遍歷,得到鍊錶的總長度getlength 4.得到size後,我們從鍊錶的第乙個開始遍歷 size index個 5.如果找到了返回該節點,否則返回null public... 在資料結構這一方面,鍊錶這塊容易搞混的是它的指標。下面的演算法為刪除單鏈表倒數第k個結點,所有的步驟解析都在 裡說明了。刪除單鏈表的倒數第 k個結點.結點定義 classnode public classremotelastedkthnode node node head 遍歷一遍鍊錶,得到 k 最... 策略 直接遍歷總數為len,再次遍歷第len k 1個就是答案,但是這樣遍歷了o n k 個,可以在o在更短的時間內找到 圖示 參考 include using namespace std typedef struct listnode listnode void createlist listno...查詢單鏈表中的倒數第 k 個結點
刪除單鏈表倒數第k個結點
刪除單鏈表的倒數第k個結點