您现在的位置是:首页 >其他 >力扣234 回文链表网站首页其他

力扣234 回文链表

format_push 2025-07-31 00:01:04
简介力扣234 回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为。回文链表如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

解法: 先利用快慢指针,找到链表中点,然后根据中点翻转后续链表,反转后在跟第一个链表比对

class Solution {
    public boolean isPalindrome(ListNode head) {
        //首先找到链表的中点,然后反转后半部分,然后再比较前半部分
        ListNode slow = head;
        ListNode fast = head.next;
        while(fast !=null && fast .next != null){
            slow = slow.next;
            fast = fast.next.next;
        }

        //翻转后半部分
         ListNode second = reverseList(slow.next);
        slow.next = null;
        //比较前半部分
        ListNode first = head;
        while(second !=null){
            if(first.val == second.val){
                first = first.next;
                second = second.next;
            }else {
                return false;
            }
        }
        return true;
    }

    private ListNode reverseList(ListNode slow) {
        ListNode prev = null;
        ListNode cur = slow;
        ListNode next = null;

        while(cur != null){
            next = cur.next;
            cur.next = prev;
            prev = cur;
            cur = next;
        }
        return prev;
    }
}

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。