题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:看到题目的倒序输出,就想到让元素进栈再出栈后放到ArrayList中。
//定义Node节点
class Node{
private Integer value;
private Node next;
public Node(Integer value){
this.value = value;
}
}
class test{
public static ArrayList<Integer> printListFromTailToHead1(Node node)
{ if(node == null)return null;
Stack stack = new Stack();
List<Integer> list = new ArrayList();
//进栈
while(node != null){
stack.push(node.value);
node = node.next;
}
//出栈
while(!stack.isempty()){
list.add((Integer)stack.pop);
}
return list;
}
}
递归也可以实现:
class test{
public static ArrayList<Integer> printListFromTailToHead1(Node node){
if(node == null)return null;
List<Integer> list = new ArrayList<>();
if(node.next != null) printListFromTailToHead1(node.next);
list.add(node.value);
return list;
}
}
class test{
public static void main(String[] args){
Node l1 = new Node(1);
Node l2 = new Node(2);
Node l3 = new Node(3);
Node l4 = new Node(4);
Node l5 = new Node(5);
Node l6 = new Node(6);
Node l7 = new Node(7);
Node l8 = new Node(8);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
l5.next = l6;
l6.next = l7;
l7.next = l8;
l8.next = null;
ArrayList<Integer> list = printListFromTailToHead1(node);
for(int i = 0; i < list.size();i++)
System.out.println(list.get(i));
}
}