核心思路:快慢指针+链表反转
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
public boolean isPail (ListNode head) {
if(head == null || head.next == null)
return true;
ListNode slow = head;
ListNode fast = head.next;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
ListNode mid = slow.next;
slow.next = null;
mid = ReverseList(mid);
//奇偶情况无所谓,偶数是都会判断,奇数
while(head != null && mid != null){
if(head.val != mid.val)
return false;
head = head.next;
mid = mid.next;
}
return true;
}
public ListNode ReverseList(ListNode head) {
ListNode head1 = new ListNode(0);
head1.next = head;
ListNode pre, cur;
pre = null;
cur = head;
while(head1.next != null){
head1.next = cur.next;
cur.next = pre;
pre = cur;
cur = head1.next;
}
return pre;
}
}