import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    public boolean isPail (ListNode head) {
        // write code here
        Deque<Integer> stackDeque=new ArrayDeque<>();
		ListNode currListNode=head;
		while(currListNode!=null) {
			stackDeque.push(currListNode.val);
			currListNode=currListNode.next;
		}
		if(stackDeque.isEmpty())return false;
		ListNode dummyListNode=new ListNode(stackDeque.pop());
		currListNode=dummyListNode;
		while(!stackDeque.isEmpty()) {
			currListNode.next=new ListNode(stackDeque.pop());
			currListNode=currListNode.next;
		}
		currListNode.next=null;
		while(head!=null) {
			if(head.val!=dummyListNode.val) {
				return false;
			}
			head=head.next;
			dummyListNode=dummyListNode.next;
		}
		return true;
    }
}

这一题我做的时候遇到了很多细节问题,首先是我进行反转链表,我一开始是将结点传入栈中,后面再把结点的next给改变了,这样就会导致一个问题,在后面创建新的反转链表时,我是要改编那些结点的next的,这个时候就会把原链表给破坏,这不是我们想要的结果。所以,我们应该传入那些结点所对应的值,而不是把结点传进去。我还遇到了一个问题,就是我在创建完反转链表的最后一个节点后,我忘了给它的next设置为null,这样的话,配合之前我传入栈中的是结点,就有可能产生一个循环链表,进入死循环。