zoukankan      html  css  js  c++  java
  • 【剑指Offer】反转链表

    题目描述

    输入一个链表,反转链表后,输出新链表的表头。

    解法1

    可以使用三个辅助指针pHead, last,next
    pHead记录当前节点,last记录上一个节点,next记录下一个节点
    首先使用next保存当前节点的下一个节点,然后将当前节点的下一个节点指向last,实现反转
    如下图所示

    实现代码

    public ListNode ReverseList(ListNode pHead)
    {
        ListNode last = null, next = null;
        while(pHead != null){
            next = pHead.next;
            pHead.next = last;
            last = pHead;
            pHead = next;
        }
        return last;
    }
    

    解法2

    解法1是将链表按照从头到尾的顺序反转的
    可以使用递归,通过不断递归深入,实现先从链表的尾节点开始反转
    然后通过递归的回溯实现按照从尾到头的顺序反转每个节点
    如下图所示

    实现代码

    public ListNode ReverseList2(ListNode pHead)
    {
        if(pHead == null || pHead.next == null) return pHead;
        ListNode node = ReverseList2(pHead.next);
        pHead.next.next = pHead;
        pHead.next = null;
        return node;
    }
    

    更多算法题目的完整描述,AC代码,以及解题思路可以查看GitHub仓库Algorithm

  • 相关阅读:
    APIO2018 题解
    【THUWC2017】在美妙的数学王国中畅游(bzoj5020)
    【bzoj3270】博物馆
    【库存】NOI笔试习题集
    装饰器
    异常
    类的详解
    函数
    流程控制
    运算符
  • 原文地址:https://www.cnblogs.com/iwiniwin/p/12781912.html
Copyright © 2011-2022 走看看