代码

测试用例
测试用例
测试结果
234. 回文链表
已解答
简单
相关标签
premium lock icon
相关企业
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

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

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

class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> dataList = new ArrayList<Integer>();
        ListNode p = head;
        while (p != null) {
            dataList.add(p.val);
            p = p.next;
        }
        int left = 0;
        int right = dataList.size() - 1;
        while (left < right) {
            if (!(dataList.get(left) == dataList.get(right))) {
                return false;
            }
            left ++;
            right --;
        }
        return true;
    }
}
class Solution {
    public boolean isPalindrome(ListNode head) {
        // List<Integer> dataList = new ArrayList<Integer>();
        // ListNode p = head;
        // while (p != null) {
        //     dataList.add(p.val);
        //     p = p.next;
        // }
        // int left = 0;
        // int right = dataList.size() - 1;
        // while (left < right) {
        //     if (!(dataList.get(left) == dataList.get(right))) {
        //         return false;
        //     }
        //     left ++;
        //     right --;
        // }
        // return true;
        ListNode firstHalfEnd = getEndOfFistHalfNode(head);
        ListNode secondHalfStart = reverseList(firstHalfEnd.next);

        // 判断是否回文
        ListNode p1 = head;
        ListNode p2 = secondHalfStart;
        boolean result = true;
        while (result && p2 != null) {
            if (p1.val != p2.val) {
                result = false;
            }
            p1 = p1.next;
            p2 = p2.next; 
        }
        // 还原链表
        firstHalfEnd.next = reverseList(secondHalfStart);
        return result;
    }




    public ListNode reverseList(ListNode head) {
        ListNode ans = new ListNode();
        while (head != null) {
            ListNode p = head.next;
            head.next = ans.next;
            ans.next = head;
            head = p;
        }
        return ans.next;
    }

    public ListNode getEndOfFistHalfNode(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        while (fast.next != null && fast.next.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
}
posted on 2025-07-11 20:27  caoshikui  阅读(6)  评论(0)    收藏  举报