1. 程式人生 > >【資料結構】單鏈表—逆置單鏈表

【資料結構】單鏈表—逆置單鏈表

題目:定義一個函式,輸入一個連結串列的頭結點,反轉該連結串列並返回反轉連結串列後的頭結點。
我們可以藉助圖來分析一下:

這裡寫圖片描述

我們定義一個新的頭結點為head,將begin指向head->_next,當begin不為空的時候,tmp = begin,begin = begin->_next,此時tmp是我們要摘下來的結點。tmp->_next = head; head = tmp;就完成了結點連結的操作。當迴圈走完時,_head = head.便完成了連結串列的逆置。

程式碼如下:

template<class T>
struct ListNode
{
    T
_value; ListNode<T>* _next; ListNode(const T& value) :_value(value) ,_next(NULL) {} }; template<class T> class List { public: List() :_head(NULL) {} bool PushBack(); void Reverse()//單鏈表的逆置 { if(_head==NULL||_head->_next
==NULL) return; ListNode<T>* head = _head; ListNode<T>* begin = _head->_next; head->_next = NULL;//置空,不然會死迴圈 ListNode<T>* tmp = NULL; while(begin!=NULL) { tmp = begin; begin = begin->_next; tmp->_next
= head; head = tmp; } _head = head; } private: ListNode<T>* _head; };