我们这就可以直接取前重点来比较嘛。
代码的话,要想验证回文,直接找到前中点的结点,然后反转后面的链表,再l1从开始比,l2从以反转的地方开始,直到比完l2就行了。
简单的一道题。
不过有些边界条件需要主要一下,以免出现空指针异常。
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { public boolean isPail (ListNode head) { ListNode preHead=new ListNode(-1); preHead.next=head; ListNode mid=findMid(head); ListNode tmp=mid.next; mid.next=null; ListNode l2 = reverse(tmp); ListNode l1 = head; while(l2!=null){ if(l1.val!=l2.val) return false; l1=l1.next; l2=l2.next; } return true; } //找 前 中点嘛 public ListNode findMid(ListNode head){ ListNode preHead=new ListNode(-1); preHead.next=head; ListNode slow=head; ListNode fast=head.next; while(fast!=null && fast.next!=null){ slow=slow.next; fast=fast.next.next; } return slow; } public ListNode reverse(ListNode head){ ListNode cur=head; ListNode pre=null; while(cur!=null){ ListNode tmp=cur.next; cur.next=pre; pre=cur; cur=tmp; } return pre; } }