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,这样的话,配合之前我传入栈中的是结点,就有可能产生一个循环链表,进入死循环。