鏈表中的一個很常見的操作是:鏈表的逆置,也叫鏈表的反轉。
如:1->3->5->7->9 反轉後是 9->7->5->3->1
紅色的箭頭是新的變換,明白了操作原理就很好寫代碼了。
使用了三個指針:pre(前驅) cur(當前) rear(後繼),經過以上的四步變換,目地是,使cur指向的節點成功逆置(反轉)指向pre所指向的節點。後面的節點的逆置,是同樣的。
struct ListNode
{
int _value;
ListNode*_next;
ListNode(int value = 0, ListNode*pnext=NULL)
:_value(value)
, _next(pnext)
{}
};
ListNode* ReverseList(ListNode*phead)
{
ListNode*preversehead = NULL;
ListNode*pnode = phead;
ListNode*ppre = NULL;
while (pnode != NULL)
{
ListNode*pnext = pnode->_next;
if (pnext == NULL)
preversehead = pnode;
pnode->_next = ppre;
ppre = pnode;
pnode = pnext;
}
return preversehead;
}