3.输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解决方案:
一、递归写法
public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
ArrayList<Integer> rs =new ArrayList<>();
fuzhu(listNode, rs);
return rs;
}
public void fuzhu(ListNode listNode,ArrayList<Integer> rs){
if(listNode==null){
return;
}
fuzhu(listNode.next, rs);
rs.add(listNode.val);
}
二、利用Stack
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<ListNode> stack =new Stack<>();
ArrayList<Integer> rs = new ArrayList<>();
ListNode head=listNode;
while(head!=null){
stack.push(head);
head=head.next;
}
if(stack.isEmpty()){
return rs;
}else{
while(!stack.isEmpty()){
rs.add(stack.pop().val);
}
return rs;
}
}
三、利用ArrayList arrayList.add(0,item)
public ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
ArrayList<Integer> rs = new ArrayList<>();
ListNode head=listNode;
while(head!=null){
rs.add(0,head.val);
head=head.next;
}
return rs;
}