劍指Offer第二版面試題6(java實現)

題目描述

       輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。

解題思路

        一種方法是利用棧來實現;
       另外一種方法是利用三個指針把鏈表反轉,關鍵是 r 指針保存斷開的節點。

代碼實現

import java.util.ArrayList;
import java.util.Stack;

//這部分是利用棧來實現的。
public class Problem06a {
    public class ListNode{
        int val;
        ListNode next = null;
        ListNode(int val){
            this.val = val;
        }
    }
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if (listNode == null)
            return new ArrayList<>();
        Stack<Integer> stack = new Stack<>();
        ArrayList<Integer> arrayList = new ArrayList<>();
        while(listNode != null){
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.isEmpty()){
            arrayList.add(stack.pop());
        }
        return arrayList;
    }
}

代碼總結

        根據題目要求,發現是典型的“後進先出”,則想到利用棧來實現。

        還可以通過反轉指針來實現,反轉指針的代碼過幾天放上來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章