反向输出链表
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
class ListNode {
public int val;
public ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
public class TestDemo031 {
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<Integer>();
while(listNode!=null){
list.add(listNode.val);
listNode=listNode.next;
}
System.out.println(list.size());
Collections.reverse(list);
return list;
}
public static ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<Integer>();
if(listNode!=null){
list=printListFromTailToHead1(listNode.next);
list.add(listNode.val);
}
return list;
}
public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
Stack <Integer> stack=new Stack<Integer>();
while(listNode!=null){
stack.push(listNode.val);
listNode=listNode.next;
}
ArrayList<Integer> list=new ArrayList<Integer>();
while(!stack.isEmpty()){
list.add(stack.pop());
}
System.out.println("size:"+list.size());
return list;
}
public static void Test1(){
ListNode root=new ListNode(0);
ListNode a1=new ListNode(1);
ListNode a2=new ListNode(2);
ListNode a3=new ListNode(3);
ListNode a4=new ListNode(4);
ListNode a5=new ListNode(5);
ListNode a6=new ListNode(6);
ListNode a7=new ListNode(7);
root.next=a1;
a1.next=a2;
a2.next=a3;
a3.next=a4;
a4.next=a5;
a5.next=a6;
a6.next=a7;
ArrayList<Integer> list=printListFromTailToHead(root);
for(Integer i:list)
System.out.print(i+"\t");
}
public static void main(String[] args) throws Exception{
Test1();
}
}
综上所述:目前一共反向遍历整个单链表的方式,java最常见的算法有这三种:
1.使用集合工具Collections.reverse()方法来反转链表;(推荐使用)
2.使用递归的方式来遍历整个链表(其本质上利用了stack结构);
3.使用stack的结构来遍历整个链表;