Day02-回文链表&webpack

Day02

算法每日一题

原题链接:https://leetcode.cn/problems/palindrome-linked-list/description/?envType=problem-list-v2&envId=2cktkvj
给你一个单链表的头节点 head ,请你判断该链表是否为
回文链表。如果是,返回 true ;否则,返回 false 。

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {boolean}
 */
var isPalindrome = function (head) {
    // 初始化两个指针,慢指针 slow 和快指针 fast,均指向链表头部
    let slow = head;
    let fast = head;

    // 使用快慢指针找到链表的中间节点
    while (fast && fast.next) {
        slow = slow.next;         // 慢指针每次移动一步
        fast = fast.next.next;    // 快指针每次移动两步
    }

    // 反转链表的后半部分
    let prev = null;
    while (slow) {
        let next = slow.next;     // 暂存下一个节点
        slow.next = prev;         // 将当前节点的 next 指向前一个节点
        prev = slow;              // 将 prev 移动到当前节点
        slow = next;              // 将 slow 移动到下一个节点
    }

    // 此时 prev 指向反转后的链表的头部
    // 初始化两个指针,left 指向链表头部,right 指向反转后的链表头部
    let left = head;
    let right = prev;

    // 比较链表的前半部分和反转后的后半部分
    while (right) {               // 只需遍历反转后的链表部分
        if (left.val !== right.val) {
            return false;         // 如果节点值不相等,则链表不是回文
        }
        left = left.next;         // 移动 left 指针
        right = right.next;       // 移动 right 指针
    }

    // 如果所有节点值都相等,则链表是回文
    return true;
};

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

核心思路是利用快慢指针找到链表的中间节点,然后反转链表的后半部分,再进行比较以判断链表是否是回文链表。具体步骤如下:

1.快慢指针找中点:由于链表没有给出长度,我们通过快慢指针来找到链表的中间节点。快指针每次移动两步,慢指针每次移动一步。当快指针到达链表末尾时,慢指针正好到达链表的中间节点。

2.反转后半部分链表:从慢指针所在的位置开始,反转链表的后半部分。这一步可以在遍历过程中进行,节省空间和时间。

3.比较前后两部分:将链表的前半部分与反转后的后半部分进行逐一比较。如果所有节点值都相等,则链表是回文链表;否则,链表不是回文链表。

前端学习记录

webpack五大核心概念
5 大核心概念
entry(入口)
指示 Webpack 从哪个文件开始打包

output(输出)
指示 Webpack 打包完的文件输出到哪里去,如何命名等

loader(加载器)
webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader,Webpack 才能解析

plugins(插件)
扩展 Webpack 的功能

mode(模式)
主要由两种模式:

开发模式:development
生产模式:production

webpack.config.js:

// Node.js的核心模块,专门用来处理文件路径
const path = require("path");

module.exports = {
  // 入口
  // 相对路径和绝对路径都行
  entry: "./src/main.js",
  // 输出
  output: {
    // path: 文件输出目录,必须是绝对路径
    // path.resolve()方法返回一个绝对路径
    // __dirname 当前文件的文件夹绝对路径
    path: path.resolve(__dirname, "dist"),
    // filename: 输出文件名
    filename: "main.js",
  },
  // 加载器
  module: {
    rules: [],
  },
  // 插件
  plugins: [],
  // 模式
  mode: "development", // 开发模式
};
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注