【資料結構】單鏈表—逆置單鏈表
阿新 • • 發佈:2019-02-01
題目:定義一個函式,輸入一個連結串列的頭結點,反轉該連結串列並返回反轉連結串列後的頭結點。
我們可以藉助圖來分析一下:
我們定義一個新的頭結點為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;
};