当前位置: 首页 > 面试题库 >

单链表反转 递归法Java实现

葛驰
2023-03-14
本文向大家介绍单链表反转 递归法Java实现相关面试题,主要包含被问及单链表反转 递归法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号节点,所以遍历时候肯定存在环。

 

 类似资料:
  • 我做了一个使用递归方法反转单链表的函数。然而,我在执行下面的代码时遇到了一些困难: 我应该如何在ReverseCursive函数/方法中传递第二个参数,以便执行它? 作为第二个参数,我想简单地传递链表的头节点。但是我不知道如何从类的init方法中获取头节点linked_list 我试了几件事,但都解决不了。也许我不太擅长OOP概念。有人能帮我解决这个问题吗?

  • 问题内容: 我已经在一个类的Java项目上工作了一段时间。它是链表(此处称为,包含称为的简单节点)的实现。问题是,一切都必须使用递归算法来完成。我可以用一种方法来做所有的事情: 现在,我的函数只是调用一个带有参数以允许递归的辅助函数。 我的助手功能具有的签名。 目前,我使用堆栈来迭代工作,但这不是规范所要求的。我在C语言中找到了一种算法,该算法可以递归地将其递归逆转并将其转换为Java代码,并且可

  • 本文向大家介绍单链表反转 遍历法Java实现相关面试题,主要包含被问及单链表反转 遍历法Java实现时的应答技巧和注意事项,需要的朋友参考一下

  • 请检查下面的反转功能。剩下的代码应该没问题。由于某种原因,该函数没有反转双链接列表。 双链表节点结构 双链表结构 按从头部到尾部的顺序排列。 请检查下面的反向函数,因为此函数不会返回反向双链接列表。检查是否有任何错误并让我知道。