劍指offer面試題6:從尾到頭列印連結串列(Java實現)
阿新 • • 發佈:2019-01-05
題目:輸入一個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。
思路:因為要實現從頭到尾遍歷,然後從尾到頭列印,也就是說第一個遍歷到的最後一個列印,最後遍歷到的第一個列印,這很明顯符合棧 “先進後出” 的特點,所以我們可以利用棧來實現這種順序。
測試用例:
- 功能測試:輸入的連結串列有多個節點或只有一個節點。
- 負面測試:輸入的連結串列頭結點指標為空。
程式碼實現有兩種方式:藉助棧實現,或使用遞迴的方法。
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class test_six { //用棧基於迴圈實現 public ArrayList<Integer> printListFormTailToHead(ListNode listNode){ ArrayList<Integer> list = new ArrayList<>(); if(listNode == null)return list; //這裡要注意不是返回null Stack<ListNode> stack = new Stack<>(); while(listNode != null){ stack.push(listNode); listNode = listNode.next; } while(!stack.isEmpty()){ list.add(stack.pop().val); } return list; } }
//遞迴方法實現,本質也是一個棧結構 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arrayList=new ArrayList<Integer>(); if(listNode!=null){ printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; }