题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:
这道题的话可以参考递归的思想,搞一波栈也是可以的。
ArrayList res = new ArrayList();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode == null) return res;
if(listNode.next!=null){
printListFromTailToHead(listNode.next);
}
res.add(listNode.val);
return res;
}
其实,可以先把链表反转,再遍历一下即可。
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode head = new ListNode(-1);
while(listNode != null){
ListNode memo = listNode .next;
listNode.next = head.next;
head.next = listNode;
listNode = memo;
}
ArrayList res = new ArrayList();
head = head.next;
while(head!=null){
res.add(head.val);
head = head.next;
}
return res;
}
或者调用Collections.reverse()来反转。
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode head = listNode;
ArrayList res = new ArrayList();
while(head!=null){
res.add(head.val);
head = head.next;
}
Collections.reverse(res);
return res;
}