Leetcode 234.回文链表 JavaScript (Day 9)

js一刷 自解法一

javascript 复制代码
var isPalindrome = function(head) {
    let p1=head 
    let temp=null;
    while(p1.next){
    p1.prev=temp;
    temp=p1;
    p1=p1.next;
    }
    p1.prev=temp;
    let p2=head
    while(p1!=p2){
        if(p1.val!=p2.val) return false;
        p1=p1.prev;
        p2=p2.next;
    } 
    return true;
};

缺点:修改了原链表

js一刷 法二

javascript 复制代码
//找中间结点
 function FindMiddle(head){
    let slow=head,fast=head;
    while(fast!=null&&fast.next!=null){
        slow=slow.next;
        fast=fast.next.next;
    }
    return slow;
 }
//反转链表
function ReserveList(head){
    let rehead=null,cur=head;
    while(cur){
        let temp=cur.next;
        cur.next=rehead;
        rehead=cur;
        cur=temp;
    }
    return rehead; 
}

var isPalindrome = function (head) {
    let flag=true
    let midNode=FindMiddle(head);
    let p1=ReserveList(midNode);
    let p2=head;
    while(p1){
        if(p1.val!=p2.val){
            flag=false;
            break;
        }
        p1=p1.next;
        p2=p2.next;
    }
    //复原链表
    ReserveList(midNode);
    return flag;
};

算法核心:分为四部分
1.找中间节点(快慢指针)
2.反转链表(头插)
3.双指针变量
4.再次反转复原链表

相关推荐
穿条秋裤到处跑1 天前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
matlab_xiaowang1 天前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
前端摸鱼匠1 天前
Vue 3 的v-bind合并行为:讲解v-bind与普通属性合并的规则
前端·javascript·vue.js·前端框架·ecmascript
REDcker1 天前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
Linsk1 天前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
当时只道寻常1 天前
浏览器文本复制到剪贴板:企业级最佳实践
javascript
Alice-YUE1 天前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
水蓝烟雨1 天前
1931. 用三种不同颜色为网格涂色
算法·leetcode
是上好佳佳佳呀1 天前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
莎士比亚的文学花园1 天前
Linux驱动开发(3)——设备树
开发语言·javascript·ecmascript