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

牛群编号的回文顺序

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

题目考察的知识点

从题目考察的知识点来看,这是一道关于链表的题目,要求判断链表中牛的编号顺序是否为回文。解题的核心思路是使用快慢指针和栈来判断回文性质。

题目解答方法的文字分析

在代码的实现上,首先需要定义快指针和慢指针,快指针的移动速度是慢指针的两倍。通过快慢指针找到链表的中点,并将前半部分的节点值依次入栈。然后,从链表的中点开始,与栈中的值逐个比较是否相等,如果有不相等的情况,则链表不是回文。

本题解析所用的编程语言

本题解析使用了JavaScript作为编程语言进行示例代码的展示。JavaScript是一种流行的脚本语言,广泛应用于前端开发和服务器端开发。

完整且正确的编程代码

function isPalindrome(head) {
    if (!head || !head.next) {
        return true; // 链表为空或只有一个节点,认为是回文
    }

    let slow = head; // 慢指针
    let fast = head; // 快指针
    let stack = []; // 用栈来存储慢指针经过的节点值

    // 快慢指针找到链表的中点,并将前半部分的节点值入栈
    while (fast && fast.next) {
        stack.push(slow.val);
        slow = slow.next;
        fast = fast.next.next;
    }

    // 如果链表有奇数个节点,跳过中间节点
    if (fast) {
        slow = slow.next;
    }

    // 逐个比较剩余的节点值与栈中出栈的值是否相等
    while (slow) {
        const val = stack.pop();
        if (val !== slow.val) {
            return false;
        }
        slow = slow.next;
    }

    return true;
}
#面试高频TOP202#
题解 | 前端刷题 文章被收录于专栏

题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务