输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
方法一:改变链表结构
采用头插入法构造新的链表,遍历链表即可
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<Integer>();
ListNode head=new ListNode(-1),temp=listNode; //采用头插入法将链表倒置
head.next=null;
while(temp!=null){
ListNode node=temp;
temp=temp.next;
node.next=head.next;
head.next=node;
}
while(head.next!=null){ //一次遍历链表,添加到list集合中
list.add(head.next.val);
head=head.next;
}
return list; //返回ArrayList集合
}
}
方法二:改变链表结构
依次遍历链表,用Stack保存数据,出栈后加入list集合中
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<Integer>();
Stack<ListNode> stack=new Stack<ListNode>();
while(listNode!=null){
ListNode temp=listNode;
listNode=listNode.next;
stack.push(temp); //节点依次入栈
}
while(!stack.isEmpty()){ //节点依次出栈
ListNode temp=stack.pop();
list.add(temp.val); //保存出栈的值
}
return list;
}
}
采用递归的思想获取list,超赞
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> list=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){ //如果不为空,就递归
printListFromTailToHead(listNode.next);
list.add(listNode.val);
}
return list;
}
}