這是一道基本題 時隔一段時間後都值得練習一下
Reverse a singly linked list.
基本思路:設置三個指針,一個爲遍歷前驅pre(遊標一 先前指針) ,一個爲當前指針cur(遊標二 當前指針),另一個作爲保存後繼節點(後繼指針),保存下一個逆置後指向的位置。
代碼如下:
ListNode* ListReverse(ListNode* L)
{
if ((NULL == L) || (NULL == L->next))return L; //邊界檢測
ListNode* pPre = L; //先前指針
ListNode* pCur = pPre->next; //當前指針
ListNode* pNext = NULL; //後繼指針
while (pCur != NULL)
{
pNext = pCur->next;//有個規律 逆置操作 賦值完的變量下一句會被賦值
pCur->next = pPre;
pPre = pCur;
pCur = pNext;
}
L->next = NULL;//沒有這句就構成環形鏈表 末端節點之前還指向頭部
L = pPre; //記錄下新的頭結點 沒有這句鏈表斷了
return L;
}