234. [链表]回文链表
234. 回文链表
方法一:额外空间+一次遍历
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> list = new ArrayList<>();
while (head != null) {
list.add(head.val);
head = head.next;
}
int front = 0, back = list.size() - 1;
while(front < back){
if(!list.get(front).equals(list.get(back))){
return false;
}
front++;
back--;
}
return true;
}
}
方法二:反转中后段链表+双指针遍历
class Solution {
public boolean isPalindrome(ListNode head) {
if (head == null) {
return true;
}
ListNode center = findCenterOfListNode(head);
ListNode reverseCenter = reverseList(center.next);
ListNode p1 = head;
ListNode p2 = reverseCenter;
while (p2 != null){
if (p1.val != p2.val) return false;
p1 = p1.next;
p2 = p2.next;
}
return true;
}
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;
}
private ListNode findCenterOfListNode(ListNode head){
ListNode fast = head;
ListNode slow = head;
while (fast.next != null && fast.next.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}

浙公网安备 33010602011771号