2.7---判断链表是否是回文(CC150)

注意,如果用的方法是翻转整个链表,那么链表都被改变了。就无法做了。

此外注意fast.next.next!= null;不然也会报错。要保证后面的比前面的少。

答案:

public static boolean isPalindrome(ListNode head){
        
        if(null == head || null == head.next) return true;
        ListNode slow = head;
        ListNode fast = head;
        while(fast != null && null != fast.next && fast.next.next != null ){
            slow = slow.next;
            fast = fast.next.next;
        }
        ListNode newHead = reverseList(slow.next);
        
        while( newHead != null){
            if(head.val != newHead.val){
                return false;
            }
            head = head.next;
            newHead = newHead.next;
        }
        return true;
    }
    public static ListNode reverseList(ListNode head){
        ListNode newHead = null;
        ListNode tmp = null;
        while(head != null){
            tmp = head;
            head = head.next;
            tmp.next = newHead;
            newHead = tmp;
        }
        return newHead;
        
    }

 

posted @ 2015-12-18 11:37  创业-李春跃-增长黑客  阅读(155)  评论(0编辑  收藏  举报