牛客网,链表回文判断
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class PalindromeList {
/*
回文判断:
1.快慢指针找中点 ---链表个数有奇偶之分
2.链表反转 --与找中点的操作同时进行
3.判断回文
*/
public boolean chkPalindrome(ListNode head) {
ListNode slow = head;
ListNode fast = head;
ListNode f_front = null;
ListNode front = null;
while ((fast != null)&&(fast.next != null)) {
fast = fast.next.next;
f_front = front;
front = slow;
slow = slow.next;
front.next = f_front;
}
ListNode h1 = null;
ListNode h2 = null;
//链表分为奇数个和偶数个,处理不同
if (fast == null) {
h1 = front;
h2 = slow;
} else {
h1 = front;
h2 = slow.next;
}
while (h1 != null) {
if (h1.val == h2.val) {
h1 = h1.next;
h2 = h2.next;
} else {
return false;
}
}
return true;
}
}