回文チェーンのプログラマーの面接の経典
1634 ワード
タイトルの説明
チェーンテーブルが返信されているかどうかを確認する関数を作成してください.
チェーンテーブル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;
}