一种解法是利用反转链表的方式
然后 把反转的链表依次添加到result的结果当中去
public static ArrayList<Integer> printListFromTailToHead(ListNode head){
if(head == null) return null;
List<Integer> temp = new ArrayList<Integer>();
if(head.next == null) {
temp.add(head.val);
return (ArrayList<Integer>) temp;
}
head = reverseListNode(head);
while(head != null){
temp.add(head.val);
head = head.next;
}
return (ArrayList<Integer>)temp;
}
public static ListNode reverseListNode(ListNode head){
ListNode prev = null;
ListNode after = head.next;
while(after != null){
head.next = prev;
prev = head;
head = after;
after = after.next;
}
head.next = prev;
return head;
}
上面是自己想到的,但是觉得有点麻烦两次遍历了链表但是网上的解法也都是两次遍历链表。
有一个关于Stack实现的解法
解法二 利用栈
栈中常用的几个方法
栈的定义 Stack stack = new Stack<>();
push
pop
isEmpty()
public static ArrayList<Integer> dealWithStack(ListNode head){
ArrayList<Integer> result = new ArrayList<>();
if(head == null) return result;
Stack<Integer> stack = new Stack();
while(head != null){
stack.push(head.val);
head = head.next;
}
while(!stack.isEmpty()){
result.add(stack.pop());
}
return result;
}