[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;
}
海康威视公司福利 1267人发布