题解 | #从尾到头打印链表#

从尾到头打印链表

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

方法一

思路

我们可以使用递归,在递归后面处理操作,即可以反向打印列表

代码

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

方法二

思路

我们可以想顺序打印链表那样加入链表的值,再反转list即可

代码

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

方法三

思路

反方向打印,我们很容易想到借助栈这个数据结构

代码

import java.util.ArrayList;
public class Solution {
    ArrayList<Integer> list = new ArrayList<>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if (listNode == null){
            return list;
        }
        Stack<ListNode> st;
        while (listNode != null){
            st.push(listNode);
            listNode = listNode.next;
        }
        while (!st.isEmpty()){
            list.add(st.pop().val);
        }
        return list;
    }
}
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务