题解 | #链表的回文结构#
链表的回文结构
http://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa
1.首先要想到使用快慢指针找到链表中间的结点,用了一个isOdd变量来判断链表个数的奇偶
2.slow指针在走的时候要使用三指针法把前半段链表逆置
3.最后从slowpre往前,一个从slow往后判断即可
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class PalindromeList {
public boolean chkPalindrome(ListNode A) {
// write code here
boolean isOdd;
boolean ans = true;
ListNode slow = A; //三指针法逆置前半段链表
ListNode slowPre = null;
ListNode slowNext = A;
ListNode fast = A;
while (true){
if (fast == null){ //如果最后是以fast为空离开循环,则是偶数个
isOdd = false;
break;
}
if (fast.next == null){ //如果最后是以fast.next为空离开循环,则是奇数个
isOdd = true;
break;
}
fast = fast.next.next;
slowNext = slow.next;
slow.next = slowPre;
slowPre = slow;
slow = slowNext;
}
if (isOdd == true) { //如果是奇数个,slow往后走一个
slow = slow.next;
}
while(slow != null){
if (slow.val != slowPre.val){
ans = false;
}
slow = slow.next;
slowPre = slowPre.next;
}
return ans;
}
}