天天看點

常見算法題總結(劍指6)

        題目:輸入一個連結清單的頭節點,從尾到頭反過來列印出每個節點的值。

方法1:可以反轉單連結清單。但是會修改原來的連結清單結構。題目的要求是單純想要讀取資料的順序而已。

方法2:從頭到尾,從尾到頭,先進後出,後進先出。一看見這種就想到棧資料結構。當周遊這個單連結清單的時候,把目前節點的值壓入棧中,當便利到最後一個節點的時候,最後節點的值在棧頂位置。然後再依次把棧彈出就可以了。

        空間O(n):需要一個棧來存儲節點

        時間O(n):周遊一遍單連結清單和棧。

Java代碼如下:

ListNode listNode1 = new ListNode();
        listNode1.setValue(1);
        ListNode listNode2 = new ListNode();
        listNode2.setValue(2);
        ListNode listNode3 = new ListNode();
        listNode3.setValue(3);
        ListNode listNode4 = new ListNode();
        listNode4.setValue(4);
        ListNode listNode5 = new ListNode();
        listNode5.setValue(5);
        listNode1.setNext(listNode2);
        listNode2.setNext(listNode3);
        listNode3.setNext(listNode4);
        listNode4.setNext(listNode5);
        reversePrint(listNode1);
    }
    public static void reversePrint(ListNode head) {
        ListNode currunt = head;
        Stack<ListNode> stack = new Stack();
        while (currunt != null ){
            stack.push(currunt);
            currunt = currunt.getNext();
        }
        while (stack.size()>0){
            System.out.printf(String.valueOf(stack.pop().getValue()));
        }
    }
           

繼續閱讀