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 52 53 54 55 56
| 这边使用第二种
class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }
class Solution{ public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null) return true; ListNode slow = head; ListNode fast = head; while(fast.next != null && fast.next.next != null) { slow = slow.next; fast = fast.next.next; } ListNode secondHalfStart = reverseList(slow.next);
ListNode p1 = head; ListNode p2 = secondHalfStart; boolean isPalindrome = true; while(isPalindrome && p2 != null) { if(p1.val != p2.val) isPalindrome = false; p1 = p1.next; p2 = p2.next; }
slow.next = reverseList(secondHalfStart); return isPalindrome; }
private ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while(curr != null) { ListNode nextTemp = curr.next; curr.next = prev; prev = curr; curr = nextTemp; } return prev; }
}
|