234. 回文链表
问题
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
思路
设置快慢两个引用,一个引用走两步,一个引用走一步,当快引用走到末尾时,慢指针指向链表中间,将后半链表翻转过来,比较前半链表与后半链表是否一致。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
if(head==null||head.next==null)
return true;
ListNode fast=head;
ListNode slow=head;
while(fast.next!=null&&fast.next.next!=null) {
fast=fast.next.next;
slow=slow.next;
}
ListNode reverse=listNodeReverse(slow.next);
while(reverse!=null) {
if(reverse.val!=head.val)
return false;
reverse=reverse.next;
head=head.next;
}
return true;
}
public ListNode listNodeReverse(ListNode head) {
if(head==null||head.next==null)
return head;
ListNode H=listNodeReverse(head.next);
head.next.next=head;
head.next=null;
return H;
}
}