回文チェーンのプログラマーの面接の経典

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;
    }