一步一步寫算法(之鏈表逆轉) (轉)

 鏈表逆轉是面試環境中常常遇到的一道題目,也是咱們在實際開發中可能會遇到的開發需求。和線性逆轉不同,單向鏈表的節點須要一個一個進行處理。爲了顯示二者之間的區別,咱們分別對線性內存和鏈表進行逆轉:面試

    (1)普通連續內存數據的反轉分析spa

  1. bool normal_revert(int array[],int length)    
  2. {    
  3.     int temp;    
  4.     int i = 0, j = length - 1;   
  5.     if (NULL == array || 0 == length)    
  6.     {    
  7.         return FALSE;    
  8.     }    
  9.     
  10.     while (i < j)    
  11.     {    
  12.         temp = array[i];  
  13.         array[i] = array[j];  
  14.         array[j] = temp;  
  15.         ++i, --j;  
  16.     }    
  17.     
  18.     return TRUE;    
  19. }  

    (2)鏈表數據的反轉.net

  1. STATUS link_revert(NODE** pNode)  
  2. {  
  3.     NODE* pPrevNode;  
  4.     NODE* pNextNode;  
  5.     if(NULL == pNode || NULL == *pNode)  
  6.         return FALSE;  
  7.   
  8.     pNextNode = (*pNode)->next;  
  9.     (*pNode) ->next = NULL;  
  10.   
  11.     while(pNextNode){  
  12.         pPrevNode = pNextNode;  
  13.         pNextNode = pNextNode->next;  
  14.         pPrevNode->next = *pNode;  
  15.         *pNode = pPrevNode;  
  16.     }  
  17.   
  18.     return TRUE;  
  19. }  

和連續內存不一樣,鏈表節點的反轉須要進行下面一些操做:指針

 

    1) 判斷指針是否爲空,判斷指針的指針是否爲空orm

    2) 將指針分紅兩個部分,一個是已經反轉成功的鏈表,即pNode;另一個是待反轉的鏈表,即pPrevNodeblog

    3) 對2)進行循環迭代處理,直到全部的節點都已經接受反轉內存

 

    建議你們能夠好好觀察一下二者之間的區別。開發

轉自:http://blog.csdn.net/feixiaoxing/article/details/6853660get

相關文章
相關標籤/搜索