[Java] 输入一个链表,按链表从尾到头的顺序返回一个ArrayList 三种解决方案

从尾到头打印链表

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

第一种解决方法:使用ArrayList<>()先添加,然后倒序在折腾到另外一个ArrayList<>()里面

public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    if (listNode == null) {
        return new ArrayList<Integer>();
    }
    ArrayList<Integer> al = new ArrayList<>();
    ArrayList<Integer> res = new ArrayList<>();
    ListNode temp = listNode;
    while (temp != null) {
        al.add(temp.val);
        temp = temp.next;
    }
    for (int i = al.size() - 1; i >= 0; i--) {
        res.add(al.get(i));
    }
    return res;
}

第二种解决方法:使用ArrayList<>()的指定位置添加,每次都插入在第一个位置,这样就实现了倒序

public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
    if (listNode == null) {
        return new ArrayList<Integer>();
    }
    ArrayList<Integer> res = new ArrayList<>();
    ListNode temp = listNode;
    while (temp != null) {
        res.add(0, temp.val);
        temp = temp.next;
    }
    return res;
}

第三种解决方法:因为是倒序,符合先进后出,明显就是栈了

public static ArrayList<Integer> printListFromTailToHeadStack(ListNode listNode) {
    if (listNode == null) {
        return new ArrayList<Integer>();
    }
    ListNode temp = listNode;
    Stack<Integer> stack = new Stack<>();
    while (temp != null) {
        stack.push(temp.val);
        temp = temp.next;
    }
    ArrayList<Integer> res = new ArrayList<>();
    while (!stack.isEmpty() && stack.size() != 0) {
        res.add(stack.pop());
    }
    return res;
}
全部评论

相关推荐

投递美团等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务