面試題——查找單鏈表的中間節點


鏈表是基本的數據結構之一,面試題中鏈表占很大一部分,可見鏈表操作是非常重要的。我對一些常見的鏈表操作進行的歸納。

        下面的問題為:查找單鏈表的中間節點。

 

題目分析:

       鏈表的特點就是有很多的節點,每個節點有數據域和指針域兩部分,指針域存放的是下一個節點的地址,根據地址找到下一個節點。鏈表只能從前到后遍歷,不能從后到前遍歷。

       對於這個問題,我們首先能夠想到的就是先遍歷一遍整個的鏈表,然后計算出鏈表的長度,進而遍歷第二遍找出中間位置的數據。這種方式非常簡單。

       若題目要求只能遍歷一次鏈表,那又當如何解決問題?可以采取建立兩個指針,一個指針一次遍歷兩個節點,另一個節點一次遍歷一個節點,當快指針遍歷到空節點時,慢指針指向的位置為鏈表的中間位置,這種解決問題的方法稱為快慢指針方法。(面試盡量用這種方式,能夠提高印象分)

 

 

下面為具體的核心算法:

  1. //查找單鏈表的中間節點,要求只能遍歷一次鏈表  
  2. SListNode * FindMidNode(SListNode * phead)  
  3. {  
  4.     SListNode *fast = phead;  
  5.     SListNode *slow = phead;  
  6.     while (fast)  
  7.     {  
  8.         if (fast->next != NULL)  
  9.         {  
  10.             fast = fast->next->next;  
  11.          }  
  12.         else  
  13.         {  
  14.             break;  
  15.         }  
  16.         slow = slow->next;  
  17.     }  
  18.     return slow;  
  19. }  
  20.   
  21.   
  22.   
  23. 也可以這樣寫,更為簡潔  
  24.     while (fast&&fast->next )  
  25.     {  
  26.         fast = fast->next->next;  
  27.         slow = slow->next;  
  28.     }  

 

 

本文出自 “無心的執着” 博客,轉載請與作者聯系!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM