单链表反转

链表结构

class MyList{
    public int val;
    public MyList next;
    public MyList(int val){
        this.val=val;
    }
}

递归和非递归实现都基于下面这张图的原理,不同的是,递归时从后向前,非递归是从前向后,并且非递归要head进行额外处理

CD转换

递归实现示意

 public static MyList recursiveReverse(MyList head){
        if(head==null||head.next==null)
            return head;
        MyList reversedList=recursiveReverse(head.next);
        head.next.next=head;

        head.next=null;
        return reversedList;
    }
递归

非递归示意

public static MyList nonRecursiveReverse(MyList head){
        MyList prev=head;
        MyList cur=head.next;
        MyList nex;
        while(cur!=null){
            nex=cur.next;
            //下面这句是错的,想想为什么
            //prev.next=null;
            cur.next=prev;

            prev=cur;
            cur=nex;

        }
        head.next=null;
        return prev;
    }
非递归

完整代码在这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转。闲来无事,决定就这个问题进行一番尝试。 ...
    冬天里的懒喵阅读 9,538评论 1 14
  • 单链表反转(java版本) 第一种方法第一步,判断节点是否为空,节点是否只有一个第二步,设置currentNode...
    syimo阅读 2,642评论 0 1
  • 单链表的反转是一道很基本的算法题,一般可以想到以下三种方法: 方法1:将单链表储存为数组,然后按照数组的索引逆序进...
    vincentgemini阅读 1,670评论 0 0
  • 基本问题 如何将单链表反转? 单链表结构定义 算法实现 进阶问题 如何将单链表在指定区间内进行反转? 问题分析 这...
    craneyuan阅读 3,325评论 0 5
  • 单链表反转 单链表初始化 输出 反转 释放 实现代码 尚未实现 元素插入 元素删除
    dawter阅读 1,706评论 0 0

友情链接更多精彩内容