[leetCode]34. 回文链表

在这里插入图片描述

快慢指针

思路:
1.将链表分为左右两部分
2.将右半部分翻转
3.使用两个指针判断是否是回文串

/**
 * 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) return true;
        // 1. 找到链表的中间节点
        ListNode fast = head, slow = head;
        while (fast.next != null && fast.next.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        ListNode mid = slow;
        ListNode rightCur = mid.next;
        mid.next = null;
        // 2. 反转右半部分的链表
        ListNode prev = null;
        while (rightCur != null) {
            ListNode temp = rightCur.next;
            rightCur.next = prev;
            prev = rightCur;
            rightCur = temp;
        }
        rightCur = prev;
        ListNode leftCur = head;
        while (leftCur != null && rightCur != null) {
            if (leftCur.val != rightCur.val)
                return false;
            leftCur = leftCur.next;
            rightCur = rightCur.next;
        }
        return true;
    } 
}
posted @ 2020-10-23 08:59  消灭猕猴桃  阅读(56)  评论(0编辑  收藏  举报