單鏈表轉置


關於單鏈表的逆置,大家都很清楚有兩種基本方法:(1)普通的循環的方法。(2)遞歸調用方法。今天正好研究這兩種方法,發現很不理解代碼這么寫的具體的作用,誠如很多人所說,吃透這個還是要自己畫一個詳細的過程圖。今天就給大家介紹一下(普通的循環方法)我學習下來的一些經驗,如有不對之處還望大家一起交流。

首先,以下是關於單鏈表逆置的普通循環方法的代碼:
//單鏈表定義
class ListNode{
        int m_nValue;
        ListNode pNext;
};
 
//單鏈表逆置實現
ListNode ReverseList(ListNode pHead)
{
    if (pHead == NULL || pHead->pNext == NULL)
    {
        retrun pHead;
    }
 
    ListNode pRev = NULL;
    ListNode pCur = pHead;
    while(pCur != NULL)
    {
        ListNode pTemp = pCur;   // 步驟①
        pCur = pCur->pNext;       // 步驟②
        pTemp->pNext = pRev;      // 步驟③
        pRev = pTemp;
    }
    return pRev;
}

 

下面我們來用圖解的方法具體介紹整個代碼的實現流程:

初始狀態:

第一次循環:

第一次循環過后,步驟①:pTemp指向Head,步驟②:pCur指向P1,步驟③:pTemp->pNext指向NULL。

此時得到的pRev為:

第二次循環:

第二次循環過后,步驟①:pTemp指向P1,步驟②:pCur指向P2,步驟③:pTemp->pNext指向Head。

此時得到的pRev為:

第三次循環:

第三次循環過后:步驟①:pTemp指向P2,步驟②:pCur指向P3,步驟③:pTemp->pNext指向P1。

此時得到的pRev為:

第四次循環:

 

第四次循環過后:步驟①:pTemp指向P3,步驟②:pCur指向NULL,步驟③:pTemp->pNext指向P2。

此時得到的pRev為:

至此,單鏈表的逆置完成。


免責聲明!

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



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