struct Node
{
    int data;
    Node* next;
};

Node *_pHead=...;

void Reverse()
{
    if (_pHead==NULL)
    {
        return;
    }

    //首先将原头结点作为逆转后链表的头结点
    Node* pReverseHead=_pHead;

    //从头节点开始,遍历每个节点
    Node* pNode=_pHead;
    while(pNode!=NULL)
    {
        //保存当前节点的[下一个节点]
        Node* pTmpNext=pNode->next;

        //将头结点串接在当前节点之后
        pNode->next=pReverseHead;

        //将当前节点作为头结点
        pReverseHead=pNode;

        //处理当前节点的[下一个节点]
        pNode=pTmpNext;
    }

    //逆转之后,原始头结点将变成最后一个节点,所以将其next置为NULL
    _pHead->next=NULL;

    //改变头结点为逆转后的头结点
    _pHead=pReverseHead;
}

//辅助函数:
void AddToHead(int data)
{
    Node* pNewNode=new Node();
    pNewNode->data=data;
    pNewNode->next=NULL;

    if (_pHead==NULL)
    {
        _pHead=pNewNode;
    }
    else
    {
        pNewNode->next=_pHead;
        _pHead=pNewNode;
    }
}

源码:点击下载


本文链接地址: 面试题:链表的逆转
https://blog.qingfengju.com/index.asp?id=286

上一篇: 实现自己的俄罗斯方块
下一篇: 用Maple13解不等式组

分类:Win32/C++ 查看次数:4409 发布时间:2012/5/9 17:16:53