《剑指offer》 第6题 从尾到头打印链表

从尾到头打印链表

https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

解法有很多,作为初学者,看了很多大佬的解法,很多大佬都用了头插法,头插法自然可以,也直观,问题在于题目的考点不在于这里,如果是机试可能没问题,如果是面试的话,可能还是得揣摩面试官想问的点是什么。另外,ArrayList是基于动态数组的实现,既然是数组,对数组头插的时间复杂度较高,一定要头插的话,应该还是LinkedList比较好。


思路1:一种经典的思想是将链表的元素入栈,利用栈的先进后出的特点,来进行逆序,这么经典的栈的使用,很符合这个题目要考的知识点。利用空间换时间。而且也不存在递归调用的栈溢出的情况。

import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> array = new ArrayList<Integer>();
        Stack<Integer> stack = new Stack<Integer>();
        //也可以求链表长度,然后创建等长度的Stack,和ArrayList。
        //毕竟ArrayList和stact是可以动态扩容的,更严谨的写法应该要加入求长度的过程。
         while(listNode != null){
             stack.push(listNode.val);
             listNode = listNode.next;
         }
        while(!stack.isEmpty()){
            array.add(stack.pop());
        }  
        return array;
    }
}

思路2:
头插法

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<>();        
        while (listNode != null) {
            list.add(0,listNode.val);
            listNode = listNode.next;
        }
        return list;
    }
}

刷刷题

全部评论

相关推荐

10-29 22:30
吉林大学 Java
同专业学长学姐,去互联网大厂的起薪&nbsp;15k+,去国企&nbsp;IT&nbsp;岗的也有&nbsp;12k+,就连去中小厂的都基本&nbsp;13k&nbsp;起步😤&nbsp;我投的传统行业技术岗,拼死拼活拿到&nbsp;1Woffer,本来还挺开心,结果逛了圈牛客直接破防,同是校招生,行业差距怎么就这么大啊!
喵喵喵6_6:应该哪里不对吧,大厂都是20k以上的,10k那种对于985本的学生基本就是点击一下过了笔试就送的,我前两天刚拿了一个11k,笔试完第2天就打电话了,非科班。坏消息是c++岗开这么低真是刷新认知了
校招生月薪1W算什么水平
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务