思路:
构造一个栈,第一步,从头遍历链表,把值存进栈里面(顺便引入一个i值,记录有几个数,可以用来找出第几个是中间值)。第二步,只需遍历一半栈和链表,for循环挨个对比,如果不一样则返回false,最后在循环外面返回ture!搞定!
public class Solution { //
public boolean isPail (ListNode head) {
Stack<Integer> s= new Stack<>();
int i=0;
ListNode tmp =head;//需要一个辅助指针
while(head!=null){//从头开始入栈
s.push(head.val);
i++;
head=head.next;
}
int mid=i/2;
for(int j=0; j < mid; j++){//只需遍历一半
if(tmp.val!=s.pop()){
return false;
}
tmp = tmp.next;
}
return true;
}
}

京公网安备 11010502036488号