题目描述
请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Palindrome {
public boolean isPalindrome(ListNode pHead) {
// write code here
if(pHead==null){
return false;
}
int len = 0;
ListNode node = pHead;
while(node!=null){
++len;
node = node.next;
}
if(len==1) return true;
Stack<Integer> stack = new Stack<Integer>();
int n = len/2;
node = pHead;
for(int i=0; i<n; ++i){
stack.push(node.val);
node = node.next;
}
if(len%2==1){ //链表元素个数为奇数个
node = node.next;
}
Integer tmp = null;
while(node!=null&&!stack.isEmpty()){
tmp = stack.pop();
if(tmp!=node.val) return false;
node = node.next;
}
return true;
}
}