逆序打印链表

【题目】

输入一个链表的头结点,从尾到头反过来打印出每个结点的值.

【代码】

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;
    }
    }

猜你喜欢

转载自blog.csdn.net/junjunba2689/article/details/80610574