天天看点

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

面试现场

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

借助栈来实现

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

为了方便理解递归,我们先采取栈的方式去实现一下。比如对于下图中所示的链表需要把它们逆序保存到数组中,本来正常顺序是1,2,3,要逆序到数组,自然想到了栈这种后进先出的数据结构。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

从前往后遍历链表,1、2、3依次进入到栈里面。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

可以看到栈里面出栈的顺序是3、2、1,所以新建一个数组,然后依次出栈的每个元素依次添加到数组中,就是我们最终得到的结果。以下是出栈进数组的过程:

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

借助栈的动画

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

借助栈的实现代码

借助栈的复杂度分析

由于遍历了一次链表+遍历了一次栈,所以时间复杂度是O(2n),新建了一个栈和要返回的数组,空间复杂度是O(2n).这里为什么要用2n,是为了和递归的实现来进行对比。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

递归实现

Java

Php

Python

JS

C++

递归的实现,我先把代码写出来,我一行行分析一下代码,给你说一下递归的实现。五种代码的实现逻辑完全相同。代码风格也保持的非常一致,以下例子对照对应的代码进行理解即可。在下面的所有图里面,红色标注的代码代表正在执行了,黑色标注的代码未执行。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

同理紧接着进入到节点为3的printListFromTailToHead(listNode.next);执行代码。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

执行到这里的时候,由于节点3是链表末尾,终于在这里解开了递归这个无底洞~,紧接着就一层层出栈并添加到数组。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

递归的动画

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

絮叨

小夕一开始不知道以什么方式讲解递归,emmm...后来想了一会觉得按照代码执行过程然后去绘制每一张图还挺不错的。另外大家看到讲解中示例图中是Java代码实现,其它语言的递归大家自行替换为自己的语言理解即可,小夕知道其它语言的朋友可能看Java稍微有那么一丢丢的困难,为此小夕的五种语言实现上大家可以看到是完全一样的,所以语言没用过不重要,丝毫不影响你的理解,小夕也是花心思的了呀~

原创不易,觉得文章不错的不妨点赞(右下角在看)、转发、留言三连支持一下小夕呀~你的在看和转发就是小夕原创的不竭的动力。

next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨
next数组_漫画:美团面试题,将链表逆序存放到数组中面试现场借助栈来实现递归实现絮叨

继续阅读