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

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