链表翻转的是三种方法

翻转链表的三种方法
  • 每次遍历从最后一个节点插入最前面
  • 使用三个指针原地不动翻转链表
  • 递归法翻转链表
    接下来进行一一叙述
(1)对于第一中方法比较笨拙,思路是:首先遍历到链表的最后一个节点,将最后一个节点插入头节点的后面,接着循环上述操作一一进行插入,知道只剩下一个节点为止。
void ReserveList(pListNode pHead)
{
    pListNode p = pHead;
    pListNode pPre = pHead;
    pListNode pTail = pHead->next;
    while (p->next->next != NULL)
    {
        while (pTail->next)
        {
            pPre = pTail;
            pTail = pTail->next;
        }
        pPre->next = NULL;
        pTail->next = p->next;
        p->next = pTail;
        p = pTail;
    }
}
(2)第二种方法比较简单,且操作简单,容易理解。思路为:首先定义三个指分别 Pre(表示当前指针的前驱初值为NULL),pCur(当前节点指针),pNext(当前节点的下一个指针),每当当前指针不为空时就会把当前指针直线前驱指针,直到当前指针为空。
void ReserveList(pListNode pHead)
{
    pListNode pre = NULL;
    pListNode pNext = NULL;
    pListNode pCur = pHead->next;
    while (pCur)
    {
        pNext = pCur->next;
        pCur->next = pre;
        pre = pCur;
        pCur = pNext;
    }
    pHead->next = pre;
}
(3)第三种方法即递归方法我感是最简单的方法,但是自我认为理解起来也比较简单,可能自己对递归方面做的题目比较多,所以理解起来比较简单,该方法思路为:当求全部链表的翻转时,只要把除当前指针外后面的指针翻转,然后再把当前指针放在翻转后的指针后面就行了,即把链表从更大范围翻转缩小更小范围
pListNode ReserveList(pListNode  p, pListNode pStaticHead)
{   
    if (pStaticHead == NULL)
    {
        return NULL;
    }
    if (p->next == NULL)
    {
        pStaticHead->next = p;
        return p;
    }
    else
    {
        pListNode temp = ReserveList(p->next,pStaticHead);
        temp->next = p;
        p->next = NULL;
        return p;
    }
}

好了 以上就是对链翻转方法的总结,

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值