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



京公网安备 11010502036488号