**
题目描述
**
给定一个链表,请判断该链表是否为回文结构。
思路
先由双指针的方法找到当前链表的中间位置,从中间位置开始,后半部分进行翻转。情况下head从头往后走 ,slow从后往前走 。只要发现对应的val值不一样,就返回false,直到head和slow相遇为止。
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) {
ListNode fast=head;
ListNode slow=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
ListNode cur=slow.next;
while(cur!=null){
ListNode curNext=cur.next;
cur.next=slow;
slow=cur;
cur=curNext;
}
while(head!=slow){
if(head.val!=slow.val){
return false;
}
if(head.next == slow) {
return true;
}
head=head.next;
slow=slow.next;
}
return true;
}
}