逆置/反轉單鏈表+查找單鏈表的倒數第k個節點,要求只能遍歷一次鏈表

鏈表中的一個很常見的操作是:鏈表的逆置,也叫鏈表的反轉。
如: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章