單鏈表的反轉問題

單鏈表的反轉問題

單鏈表反轉問題經常會遇到。在此記錄一下,以便查閱方便。

如果反轉一個有頭結點的使用下面的方法比較合適。

//反轉單鏈表,此單鏈錶帶有頭節點。
//思想:使用tmp臨時指針保存頭結點與鏈表的關係
typedef struct ListNode 
{
	int data;
	struct ListNode * next;
}ListNode,*LinkList;
void ReverseList(ListNode* Head)
{
	ListNode *current,*tmp;
	current = Head->next;
	if(current != NULL)//反轉後第一個節點的後繼要爲NULL
	{
		tmp = current;
		current = current->next;
		tmp->next = NULL;
	}
	
	while(current!=NULL)
	{
		tmp = current;
		current = current->next;
		tmp->next = Head->next;
		Head->next = tmp;
	}
}

如果沒有頭結點,下面的反轉比較合適

//如果沒有頭節點,下面的函數比較適合
//思想:使用pre和next兩個指針來記錄當前處理的節點的前一個節點和後一個節點的信息
ListNode * ReverseLinkList(ListNode * head)
{
	ListNode * pre,*next;
	pre = NULL;
	next = NULL;
	while(head)
	{
		next = head->next;
		head->next = pre;
		pre = head;
		head = next;
	}
	return pre;
}


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