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.再次反转复原链表

相关推荐
午安~婉2 小时前
Electron桌面应用聊天(续)
前端·javascript·electron
skywalker_112 小时前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
wfbcg3 小时前
每日算法练习:LeetCode 209. 长度最小的子数组 ✅
算法·leetcode·职场和发展
哟哟耶耶3 小时前
vue3-单文件组件css功能(:deep,:slotted,:global,useCssModule,v-bind)
前端·javascript·css
是罐装可乐3 小时前
深入理解“句柄(Handle)“:从浏览器安全到文件系统访问
前端·javascript·安全
_日拱一卒3 小时前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾3 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
华科易迅3 小时前
Vue如何集成封装Axios
前端·javascript·vue.js
不是az3 小时前
CSS知识点记录
前端·javascript·css