栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

单链表反转 递归法Java实现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单链表反转 递归法Java实现

经历了很多面试,面试官最爱考察的算法无非是斐波那契数列和单链表反转,尽管是这些都是基础知识,然而我对单链表反转有更多的想法。 递归法是我早期最爱在面试中使用的算法,很有逼格,写起来非常优雅,非常好理解。

先定义链表数据结构

static class Node {    Integer data;    Node next;}static Node readyNode() {    Node linkNode1 = new Node();    linkNode1.data = 1;    Node linkNode2 = new Node();    linkNode2.data = 2;    Node linkNode3 = new Node();    linkNode3.data = 3;    Node linkNode4 = new Node();    linkNode4.data = 4;    Node linkNode5 = new Node();    linkNode5.data = 5;    Node linkNode6 = new Node();    linkNode6.data = 6;    linkNode1.next = linkNode2;    linkNode2.next = linkNode3;    linkNode3.next = linkNode4;    linkNode4.next = linkNode5;    linkNode5.next = linkNode6;    return linkNode1;}

如上代码所示

递归法会逐层确定该节点有没有next节点,若为空,则认定递归到最深层元素。同时将该层节点的next指向父节点,在递归栈中以此类推。

static Node reverselinkedList(Node node) {    if (node == null || node.next == null) {        return node;    } else {        Node headNode = reverselinkedList(node.next);        node.next.next = node;        node.next = null;        return headNode;    }}

上图展示了递归后的效果。 如果注释掉第7行,会发生如上图所示的1、2号节点闭环问题。由于1号节点的next没有置空,依旧指向2号节点,所以遍历时候肯定存在环。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/363100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号