鏈表反轉

在牛客網上刷題的過程遇到很多鏈表的問題,所以自己又結合着傳智播客上的視頻把鏈表整理了一下,本文是在上文的基礎上操作的,c++之鏈表篇1:單向鏈表的創建,打印,刪除,插入,銷燬等基本操作的。

本文中的單鏈表的反轉是對結點一個一個操作的,每次把後面的一個結點拋到前面,不需要開闢另外的內存空間,效率較高。下面請參考代碼和圖片中的變量來研究單鏈表的反轉


[cpp] view plain copy print?

  1. ListNode *listReverse(ListNode *pHead)  

  2. {  

  3.   

  4. }  



一、代碼的初始化

二、鏈表中結點的反轉

三、操作並返回頭結點

四、代碼


ListNode *listReverse(ListNode *pHead)  
{  
    if(pHead == NULL)  
        return NULL;  
    ListNode *pCurrent ,*pPre,*pNext;  
                             //一、指針的初始化階段  
    pPre = pHead;  
    pCurrent = pPre->next ;  
  
    while(pCurrent)            //二、反轉單鏈表的核心代碼  
    {  
        pNext = pCurrent->next ;  //1. 緩衝pCurrent後面的單鏈表  
        pCurrent->next = pPre ;   //2. 反轉單鏈表  
        pPre = pCurrent;        //3.讓pPre指針後移  
        pCurrent = pNext ;       //4. 讓pCurrent指針後移  
    }  
                      //三、處理並返回頭指針  
    pHead->next = NULL;             //把原頭結點的next域變成空指針  
    pHead = pPre ;//把頭結點指向最後一個結點產生新的頭結點,也就是把原單鏈表的尾結點變成頭結點  
  
    return pHead;  
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章