反转链表与从尾到头打印链表

版权声明: https://blog.csdn.net/qq_41880190/article/details/84433186

反转链表



ListNode* ReverseList(ListNode* pHead){    if(pHead == NULL)    {        return NULL;    }    if(pHead->next == NULL)    {        return pHead;    }    ListNode* pCur = pHead->next;    ListNode* pPrev = pHead;    ListNode* pNext = pCur->next;    while(pCur->next)    {        pNext = pCur->next;        pCur->next = pPrev;        pPrev = pCur;        pCur = pNext;    }    pCur->next = pPrev;    //最后一个节点的指向它的前驱    pHead->next = NULL;    //最后一个结点的下一个结点置 NULL    return pCur;}

栈实现

ListNode* ReverseList(ListNode* pHead)
{
    if (pHead == nullptr || pHead->next == nullptr)
    {
        return pHead;
    }
    stack<ListNode*> node;
    ListNode* pCur = pHead;
    while(pCur->next)    //链表不为空入栈
    {
        node.push(pCur);
        pCur = pCur->next;
    }
    ListNode* pReversedNode = pCur;    //反转后新链表的头节点就是栈顶元素
    while(!node.empty())
    {
        pCur->next = node.top();
        pCur = pCur->next;
        node.pop();
    }
    pCur->next = NULL;
    return pReversedNode;
}

递归实现

ListNode* ReverseList(ListNode* pHead)
{
    if(pHead == NULL || pHead->next == NULL)
        return pHead;
    ListNode* pReversedNode = ReverseList(pHead->next);
    pHead->next->next = pHead;    //反转节点
    phead = NULL;    //第一个节点反转后置下一个为 NULL
    return pReversedNode;
}

从尾到头打印链表

递归实现


void ReverseList(ListNode* pHead)
{
    if(pHead != NULL)
    {
        if(pHead->next != NULL)
        {
            ListNode* pReversedNode = ReverseList(pHead->next);
        }
        cout << pReversedNode->data;
    }
}

栈实现


j仅仅打印链表的值,不修改链表结构

先遍历链表,再打印

void ReverseList(ListNode* pHead)    //先进后出利用栈的特性
{
    if(pHead == NULL || pHead->next == NULL);
        return phead;
    stack<ListNode*> node;    
    ListNode* pCur = pHead;
    while(pCur->next)    //pCur 一直遍历直到 pCur->next == NULL,入栈结束
    {
        node.push(pCur);
        pCur = pCur->next;
    }
    while(!node.empty())    //栈不为空,pop 出栈并且打印
    {
        pCur = node.top();
        cout << pCur->data;
        node.pop();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41880190/article/details/84433186
今日推荐