劍指offer 15-反轉鏈表

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章