题目描述
请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
代码实现:
public boolean isPalindrome(ListNode pHead) {
if(pHead==null) return false;
LinkedList<ListNode> l1 =new LinkedList<ListNode>();
LinkedList<ListNode> l2 =new LinkedList<ListNode>();
ListNode p =pHead;
int i=0;
while(p!=null){
i++;
p=p.next;
}
if(i%2==0){//偶数
int n1=0;
while(n1<=(i/2)){
++n1;
l1.add(pHead);
pHead=pHead.next;
}
int n2=i/2+1;
while(n2<i){
++n2;
l2.add(pHead);
if(n2!=i)
pHead=pHead.next;
}
}else{//奇数
int n1=0;
while(n1<(i/2)){
++n1;
l1.add(pHead);
System.out.println(pHead.val);
pHead=pHead.next;
}
int n2=i/2+2;
pHead=pHead.next;
while(n2<=i){
++n2;
l2.add(pHead);
System.out.println(pHead.val);
pHead=pHead.next;
}
}
int k,j;
for(k=0,j=l2.size()-1;k<l1.size() && j>=0;k++,j--){
if(l1.get(k).val !=l2.get(j).val)
return false;
}
return true;
}