解题思路
首先找到链表中点,对中点及以后的链表进行反转,分别对比左右两端节点的值是否相等
参考代码
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
| class Solution { public boolean isPalindrome(ListNode head) { ListNode mid = middleNode(head); ListNode head2 = reverseNode(mid); while(head2 != null) { if(head.val != head2.val) { return false; } head = head.next; head2 = head2.next; } return true; }
private ListNode middleNode(ListNode head) { ListNode slow = head; ListNode fast = head; while(fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } return slow; }
private ListNode reverseNode(ListNode head) { ListNode pre = null; ListNode cur = head; while(cur != null) { ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } return pre; } }NoL
|