题目描述
请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
解题思路:利用栈进行反转对比操作,注意快慢指针的使用,链表长度为奇数或者偶数时的特殊处理即可。
public boolean isPalindrome(ListNode pHead) {
if(pHead==null||pHead.next==null){
return false;
}
ListNode fast=pHead;
ListNode slow=pHead;
Stack<Integer> s=new Stack<Integer>();
s.push(pHead.val);
while(fast.next!=null&&fast.next.next!=null){
slow=slow.next;
fast=fast.next.next;
s.push(slow.val);
}
if(fast.next==null){
s.pop();
}
while(slow.next!=null){
slow=slow.next;
if(slow.val!=s.pop()){
return false;
}
}
return true;
}