單鏈表反序

看圖說話,需要用到三個連續節點的指針,用中間那個來進行反序操作(P2->next=P1)。

template<typename T>
struct Node
{
	T value;
	Node<T> *next;
};

template<typename T>
Node<T> *singleLinkedListReverse(Node<T> *head)
{
	if ( !head || !head->next)
	{
		return head;
	}
	//需要同時知道相連的三個節點,
	//將中間節點的指針指向前一個節點後,繼續向後遍歷
	Node<T> *p1 = head, *p2 = head->next, *p3;
	while (p2)
	{
		p3 = p2->next;

		p2->next = p1;
		p1 = p2;
		p2 = p3;
	}
	head->next = nullptr;
	return p1;
}

 

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