程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 面試題快慢鏈表和快慢指針

面試題快慢鏈表和快慢指針

編輯:關於C++

面試題快慢鏈表和快慢指針。本站提示廣大學習愛好者:(面試題快慢鏈表和快慢指針)文章只能為提供參考,不一定能成為您想要的結果。以下是面試題快慢鏈表和快慢指針正文


面試題快慢鏈表和快慢指針

投稿:lqh

這篇文章主要介紹了面試題快慢鏈表和快慢指針的相關資料,需要的朋友可以參考下

騰訊的一道面試題:如何快速找到位置長度單鏈表的中間節點?普通方法,就是先遍歷,在從頭找到2/length的中間節點。算法復雜度是:O(3*n/2)。而更快的方法就是利用快慢指針的原理。

快慢鏈表:利用標尺的思想,設置兩個指針(一快一慢)*serach和*mid,剛開始都指向單鏈表的頭結點。但是*search指針的移動速度是*mid的兩倍。當*search到尾結點的時候,mid剛好到了中間。算法復雜度是:O(n/2)

int GetMidNode(LinkList *L,int elem){
  LinkList *search,*mid;
  mid = search = L; //指向頭結點
  while (search->next != NULL){ //當存在下個結點的時候 
    if (search->next->next!=NULL) {//檢查下個的下個節點是否為空 
      search = search->next->next;
      mid = mid->next;
    } 
    else
      search = search->next;
  }
  elem = mid->data;
  return elem;
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved