題目:輸入一個連結清單的頭節點,從尾到頭反過來列印出每個節點的值。
方法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()));
}
}