import java.util.Stack;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    public boolean isPail (ListNode head) {
        // write code here
        if (null == head) {
            return false;
        }
        if (null == head.next) {
            return true;
        }
        // 具体代码实现
        // 定义一个辅助栈
        Stack<Integer> stack = new Stack<>();
        // 定义一个辅助指针
        ListNode tp = head;
        // 将链表内的所有节点依次入栈
        while (null != tp) {
            stack.push(tp.val);
            tp = tp.next;
        }
        tp = head;
        // 定义一个临时变量,用于存放从栈中弹出的数字
        int val = 0;
        // 将栈中的节点依次弹出,并与原链表的节点依次比较
        while (!stack.isEmpty()) {
            val = stack.pop();
            if (val != tp.val) {
                return false;
            }
            tp = tp.next;
        }
        return true;
    }
}