翻转链表的两种方式

单向链表的翻转通常是经常遇到的问题,接下来我用两种方式来进行链表的翻转!

三指针法

三指针毫无疑问就是使用三个指针去翻转链表,这种方式可以是我们很容易的实现链表的翻转,首先定义三个指针,分别指向第一个节点、第二个节点、第三个节点,然后由于我们保存了节点的地址,当然也就可以随心所欲的操作这些节点的指向了!
这里写图片描述

代码如下

//6. 逆置/反转单链表 
void ReverseList(pList* pplist)
{
    pNode pCur = NULL;
    pNode tmp = NULL;
    pNode tmp2 = NULL;

    assert(pplist != NULL);
    assert(*pplist != NULL);
    //将三个指针赋值
    pCur = *pplist;
    tmp = pCur->next;
    tmp2 = tmp->next;

    //原头节点先赋值为NULL
    pCur->next = NULL;

    while (tmp2 != NULL)
    {
        //改变指向
        tmp->next = pCur;

        //3个指针后移
        pCur = tmp;
        tmp = tmp2;
        tmp2 = tmp2->next;
    }

    //循环完毕最后一步的处理
    *pplist = tmp;
    tmp->next = pCur;
}

递归写法

TODO 递归 Tim

猜你喜欢

转载自blog.csdn.net/m0_38032942/article/details/81196834