1,題目
定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點。
2,分析
反轉鏈表進行的其實就是指針指向的操作問題,當前節點指針pNode,將其指向前一個指針pPrev,此時pNode原先指向的下一節點斷開,所以還需pNext保存pNode的下一指針。
主要步驟是讓pNode指向前一指針pPrev後,後移pPrev和pNode指針,pPrev指向pNode,pNode指向下一節點,兩者順序不要弄反了,直到pNode爲NULL,此時反轉完成,將頭結點head指向最後一個節點pPrev即可。
3,代碼
ListNode *reverseList(ListNode **head)
{
if(*head == NULL || (*head)->next == NULL)
return *head;
ListNode *pNode = (*head)->next;
ListNode *pPrev = NULL;
while(pNode)
{
ListNode *pNext = pNode->next;
pNode->next = pPrev;
pPrev = pNode;
pNode = pNext;
}
//pNode爲空即反轉完畢,此時pPrev爲最後一個節點,頭結點指向它即可
(*head)->next = pPrev;
return *head;
}