现在的位置: 首页 > 综合 > 正文

链表反转

2018年02月08日 ⁄ 综合 ⁄ 共 526字 ⁄ 字号 评论关闭
    void reverse(node*& head)
    {
        if ( (head == 0) || (head->next == 0) ) return;// 边界检测
        node* pNext = 0;
        node* pPrev = head;// 保存链表头节点
        node* pCur = head->next;// 获取当前节点
        while (pCur != 0)
        {
            pNext = pCur->next;// 将下一个节点保存下来
            pCur->next = pPrev;// 将当前节点的下一节点置为前节点
            pPrev = pCur;// 将当前节点保存为前一节点
            pCur = pNext;// 将当前节点置为下一节点
        }
    }

首先我们分析一下这个思想:

1->2->3->4->5->6;

如果要逆转它第一步实现为:

1<-2  3->4->5->6;

看好这里会断链.(我一直相不通的就是这里)

其实在循环中我们只需要3个节点指针: 上一个, 当前, 下一个

在进入循环之前把这个三个指针准备好就行了

具体看上面代码实现

其实用循环实现是最简单的

参考:

http://www.yuanma.org/data/2006/1106/article_1785.htm

http://www.cppblog.com/tx7do/archive/2009/01/06/71280.html

抱歉!评论已关闭.