1.题目
2.解题思路
一开始想用栈来做,但为了空间复杂度达到O(1),使用另一种方法
把链表前半段反转,之后与后半段比较
3.代码实现
class Solution {
public boolean isPalindrome(ListNode head) {
ListNode first = head, midnode = head;
int count = 0 , mid = 0;
while(first != null) {
first = first.next;
count++;
}
if(count % 2 == 1) {
count /= 2;
mid = count + 1;
}else {
count /= 2;
mid = count;
}
for(int i = 0; i < mid; i++) {
midnode = midnode.next;
}
boolean flag = true;
ListNode firstnode = new ListNode(0);
first = head;
for(int i = 0; i < count; i++) {
ListNode next = first.next;
first.next = firstnode.next;
firstnode.next = first;
first = next;
}
firstnode = firstnode.next;
for (int i = 0; i < count; i++) {
if(firstnode.val != midnode.val) {
flag = false;
break;
}
firstnode = firstnode.next;
midnode = midnode.next;
}
return flag;
}
}