剣指Offer第二面問題6(java実現)


テーマの説明
       チェーンを入力して、最後の端からチェーン値の順にArayListを返します。
問題を解く構想
        一つの方法はスタックを利用して実現することである。       もう一つの方法は、3つのポインタを利用してリンクを反転させることであり、鍵は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 printListFromTailToHead(ListNode listNode) {
        if (listNode == null)
            return new ArrayList<>();
        Stack stack = new Stack<>();
        ArrayList arrayList = new ArrayList<>();
        while(listNode != null){
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.isEmpty()){
            arrayList.add(stack.pop());
        }
        return arrayList;
    }
}
コードまとめ
        問題の要求によって、典型的な「後進先出」であることが分かりました。
        また、針を反転させることで、反転針のコードを数日間かけて乗せることができます。