劍指Offer(java+第五題,從尾到頭列印連結串列)
阿新 • • 發佈:2019-01-10
思路:藉助棧實現,或使用遞迴的方法。
程式碼實現:
import java.util.ArrayList; import java.util.Stack; //定義連結串列結構,如果這部分程式碼放到類Offer05裡面就會報錯;如果非把ListNode放到類Offer05裡面就要在class ListNode{...}前面加上static class ListNode{ ListNode next; int val; } public class Offer05 { public ArrayList<Integer> printListFromTailToHead(ListNode listNode){ ArrayList<Integer> list = new ArrayList<>(); if(listNode == null) return list; 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 static void main(String[] args) { Offer05 of5 = new Offer05(); //測試用例 //1,功能測試(輸入的連結串列有多個節點,輸入的連結串列只有一個節點) ListNode node1 = new ListNode(); ListNode node2 = new ListNode(); ListNode node3 = new ListNode(); node1.val = 1; node2.val = 2; node3.val = 3; node1.next = node2; node2.next = node3; System.out.println(of5.printListFromTailToHead(node1)); ListNode node4 = new ListNode(); node4.val = 4; System.out.println(of5.printListFromTailToHead(node4)); //2,特殊輸入測試(輸入的連結串列頭節點指標為null) ListNode node5 = null; System.out.println(of5.printListFromTailToHead(node5)); } }
輸出結果: