题解 | #牛群编号的回文顺序#

牛群编号的回文顺序

https://www.nowcoder.com/practice/e41428c80d48458fac60a35de44ec528

一、知识点:

遍历、链表

二、文字分析:

快慢指针的方法找到链表的中间节点,然后反转后半部分链表。最后,我们分别从链表的头部和反转后的后半部分开始遍历并比较每个节点的值,判断链表是否是回文的。

时间复杂度是 O(n),空间复杂度是 O(1)。

三、编程语言:

java

四、正确代码:

import java.util.*;

public class Solution {
    public boolean isPalindrome(ListNode head) {
        // 使用快慢指针找到链表的中间节点
        ListNode slow = head;
        ListNode fast = head;

        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }

        // 反转后半部分链表
        ListNode secondHalf = reverseList(slow);

        // 判断是否是回文链表
        ListNode p1 = head;
        ListNode p2 = secondHalf;
        while (p1 != null && p2 != null) {
            if (p1.val != p2.val) {
                return false;
            }
            p1 = p1.next;
            p2 = p2.next;
        }

        return true;
    }

    private ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;

        while (curr != null) {
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }

        return prev;
    }
}

全部评论

相关推荐

2025-12-11 14:24
门头沟学院 Java
牛客35720396...:不要用boss,全是骗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务