單鏈表的逆置--普通循環方法(詳細圖解)


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

首先,以下是關於單鏈表逆置的普通循環方法的代碼:

//單鏈表定義
typedef struct 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