在牛客網上刷題的過程遇到很多鏈表的問題,所以自己又結合着傳智播客上的視頻把鏈表整理了一下,本文是在上文的基礎上操作的,c++之鏈表篇1:單向鏈表的創建,打印,刪除,插入,銷燬等基本操作的。
本文中的單鏈表的反轉是對結點一個一個操作的,每次把後面的一個結點拋到前面,不需要開闢另外的內存空間,效率較高。下面請參考代碼和圖片中的變量來研究單鏈表的反轉
[cpp] view plain copy print?
ListNode *listReverse(ListNode *pHead)
{
}
一、代碼的初始化
二、鏈表中結點的反轉
三、操作並返回頭結點
四、代碼
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; }