1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
class Solution { public boolean isPalindrome(ListNode head) { if(head == null || head.next == null) return true; ListNode slow = head, fast = head.next; while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; } if(fast != null) slow = slow.next; cut(head,slow); return isPalindrome(head,reverseList(slow)); } public boolean isPalindrome(ListNode l1,ListNode l2){ while(l1 != null && l2 != null){ if(l1.val != l2.val) return false; l1 = l1.next; l2 = l2.next; } return true; } public ListNode reverseList(ListNode head){ if(head == null || head.next == null) return head; ListNode temp = reverseList(head.next); head.next.next = head; head.next = null;
return temp; } public void cut(ListNode l1, ListNode l2){ while(l1.next != l2){ l1 = l1.next; } l1.next = null; } }
|