【题目】
输入一个链表的头结点,从尾到头反过来打印出每个结点的值.
【代码】
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class demo {
public static void main(String[] args) {
ListNode node1=new ListNode(1);
ListNode node2=new ListNode(2);
ListNode node3=new ListNode(3);
ListNode node4=new ListNode(4);
ListNode node5=new ListNode(5);
ListNode node6=new ListNode(6);
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
node5.next=node6;
node6.next=null;
ArrayList<Integer> list=printListFromTailToHead1(node1);
for(int i:list){
System.out.println(i+" ");
}
}
//逆序打印链表:9276k,21ms
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList list=new ArrayList();
ArrayList list1=new ArrayList();
while(listNode!=null){
list.add(listNode.val);
listNode=listNode.next;
}
int len=list.size()-1;
while(len>=0){
list1.add(list.get(len--));
}
return list1;
}
//栈的思想:9308k,25ms
public static ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
ArrayList list=new ArrayList();
Stack<Integer> stack=new Stack<Integer>();
while(listNode!=null){
stack.push(listNode.val);
listNode=listNode.next;
}
while(!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}
}