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", // 开发模式
};