class Solution {
public boolean isPalindrome(ListNode head) {
if (head == null || head.next == null) return true;
// 快慢指针找到链表的中点
ListNode fast = head;
ListNode slow = head;
while (fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}
// fast.next == null 表示奇数个结点,否则为偶数个结点
ListNode reverse = reverse(slow.next);
return equal(head, reverse);
}
// 反转链表的做法(通过三个节点实现反转)
private ListNode reverse(ListNode node) {
if (node == null || node.next == null) return node;
ListNode prev = null;
ListNode curr = node;
ListNode next = node.next;
while (next != null) {
curr.next = prev;
prev = curr;
curr = next;
next = next.next;
}
curr.next = prev;
return curr;
}
private boolean equal(ListNode node1, ListNode node2) {
while (node2 != null) {
if (node2.val != node1.val) return false;
node2 = node2.next;
node1 = node1.next;
}
return true;
}
}
刷题笔记 Hot100 234. 回文链表
最新推荐文章于 2024-07-22 19:36:52 发布