判断一个链表是否回文 public class Nowcoder { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Partition { public int length(ListNode pHead) {//求链表长度 int len = 0; ListNode c = pHead; while (c != null) { len++; c = c.next; } return len; } public ListNode reverse(ListNode pHead) {//反转链表 ListNode result = null; ListNode c = pHead; while (c != null) { ListNode next = c.next; c.next = result; result = c; c = next; } return result; } public boolean chkPalindrome(ListNode pHead) { int len = length (pHead); int haifLen = len / 2; ListNode middle = pHead; for (int i = 0; i < haifLen; i++) {//让middle先走一半 middle = middle.next; } ListNode r = reverse (middle);//再逆置后一半 ListNode c1 = pHead; ListNode c2 = r; while (c1 != null && c2 != null) { if (c1.val != c2.val) { return false; } c1=c1.next; c1=c2.next; } return true; } } }