關於單鏈表的逆置,大家都很清楚有兩種基本方法:(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為:
至此,單鏈表的逆置完成。