题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
1、快慢指针找中点,用快指针多一个起点的方法,可以保证慢指针的next为最短的后半部分
2、把后半部分反转
3、用后半部分来循环对比前半部分,满足后半部分完全匹配即可,无需在意前半部分多一个中间点,因为链表可能是基础的情况
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { public boolean isPail (ListNode head) { // write code here if(head.next == null) return true; // 1、快慢指针找出中点 ListNode fast = head.next, slow = head; while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; } // 2、直接把后半部分赋值,前半部分可能存在多一个中间点,但是我们的对比方法可以兼容 ListNode tmp = slow.next; slow.next = null; // 3、反转后半部分的指针 ListNode res = reverse(tmp); // 4、比较俩个链表,可能存在一长一短,因为可能是奇数的链表,但是可以忽略,因为保证后半部分是最短的 while (res != null) { if (res.val != head.val) return false; res = res.next; head = head.next; } return true; } // 反转链表(基础) public ListNode reverse(ListNode head){ ListNode pre = null; while(head != null){ ListNode tmp = head.next; head.next = pre; pre = head; head = tmp; } return pre; } }#链表回文#