Java-从尾到头输出链表

从尾到头打印链表

http://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035

题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
示例1
输入
{67,0,24,58}
返回值
[58,24,0,67]
解题思路
方法一:利用ArrayList.add(index,val),每次都把结果插入到第0个位置
方法二:直接进行递归-不通过
方法三:直接遍历,之后再将ArrayList进行反转
方法四:自己创建个栈,先把遍历结果存入栈中,最后再将栈内内容弹出放入ArrayList
方法五:先将链表进行反转,之后再遍历

Java代码实现

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.*;
public class Solution {
    //利用这个add的重载方法,但是本身就有复杂度
    public ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {//13ms  9620KB 
        ArrayList<Integer> list=new ArrayList<>();
        while(listNode != null){
            list.add(0,listNode.val);
            listNode=listNode.next;
        }
        return list;
    }
    //利用系统的栈进行递归,直接不通过
    public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
        ArrayList<Integer> list=new ArrayList<>();
        while(listNode != null){
            printListFromTailToHead2(listNode.next);
            list.add(listNode.val);
        }
        return list;
    }
    //反转链表
    public ArrayList<Integer> printListFromTailToHead3(ListNode listNode) {//11 ms 9608KB 
        ArrayList<Integer> list=new ArrayList<>();
        while(listNode != null){
            list.add(listNode.val);
            listNode=listNode.next;
        }
        Collections.reverse(list);//直接反转链表
        return list;
    }
    //利用栈遍历,最后再把栈弹出到列表
    public ArrayList<Integer> printListFromTailToHead4(ListNode listNode) {//13 ms 9688KB 
        ArrayList<Integer> list=new ArrayList<>();
        Stack<Integer> stack=new Stack<>();
        while(listNode != null){
            stack.push(listNode.val);
            listNode=listNode.next;
        }
        while(!stack.empty()){
            list.add(stack.pop());
        }
        return list;
    }
    //先反转链表,再遍历存入list
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {//12 ms 9752KB 
        ArrayList<Integer> list=new ArrayList<>();
        ListNode pre=null;
        ListNode cur=listNode;
        ListNode temp=cur;
        while(cur != null){
            temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        while(pre != null){
            list.add(pre.val);
            pre=pre.next;
        }
        return list;
    }
}
全部评论
方法二:直接进行递归-不通过 需要把list定义成全局变量。 import java.util.ArrayList; public class Solution { ArrayList<integer> list = new ArrayList<>(); public ArrayList<integer> printListFromTailToHead(ListNode listNode) { if(listNode != null){ printListFromTailToHead(listNode.next); list.add(listNode.val); } return list; } }</integer></integer>
2 回复 分享
发布于 2021-10-13 16:12

相关推荐

11-03 13:18
门头沟学院 Java
包行:平时怎么刷算法题的哇,字节的手撕听说都很难
字节跳动工作体验
点赞 评论 收藏
分享
11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
33
8
分享

创作者周榜

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