面試題快慢鏈表和快慢指針
更新時間:2017年06月16日 11:52:46 投稿:lqh
這篇文章主要介紹了面試題快慢鏈表和快慢指針的相關資料,需要的朋友可以參考下
騰訊的一道面試題:如何快速找到位置長度單鏈表的中間節(jié)點?普通方法,就是先遍歷,在從頭找到2/length的中間節(jié)點。算法復雜度是:O(3*n/2)。而更快的方法就是利用快慢指針的原理。
快慢鏈表:利用標尺的思想,設置兩個指針(一快一慢)*serach和*mid,剛開始都指向單鏈表的頭結(jié)點。但是*search指針的移動速度是*mid的兩倍。當*search到尾結(jié)點的時候,mid剛好到了中間。算法復雜度是:O(n/2)
int GetMidNode(LinkList *L,int elem){
LinkList *search,*mid;
mid = search = L; //指向頭結(jié)點
while (search->next != NULL){ //當存在下個結(jié)點的時候
if (search->next->next!=NULL) {//檢查下個的下個節(jié)點是否為空
search = search->next->next;
mid = mid->next;
}
else
search = search->next;
}
elem = mid->data;
return elem;
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
C語言 動態(tài)內(nèi)存開辟常見問題解決與分析流程
動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存2022-03-03
深入解析C++的循環(huán)鏈表與雙向鏈表設計的API實現(xiàn)
這篇文章主要介紹了C++的循環(huán)鏈表與雙向鏈表設計的API實現(xiàn),文中的示例對于鏈表結(jié)點的操作起到了很好的說明作用,需要的朋友可以參考下2016-03-03
C++11并發(fā)編程關于原子操作atomic的代碼示例
今天小編就為大家分享一篇關于C++11并發(fā)編程關于原子操作atomic的代碼示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

