当前位置: 首页 > news >正文

LeetCode 链表

LeetCode 链表简单题 + 可直接本地运行的 JS 版本,每道题都包含:

  • 链表节点构造函数
  • 数组转链表 / 链表转数组(方便本地调试)
  • 完整可运行代码
  • 测试用例

直接复制到浏览器控制台 / Node.js 就能跑,不用改任何东西!


先写通用工具函数(所有题都能用)

// 1. 链表节点构造函数 function ListNode(val, next) { this.val = val === undefined ? 0 : val; this.next = next === undefined ? null : next; } // 2. 数组 => 链表 function arrayToList(arr) { let dummy = new ListNode(); let cur = dummy; for (let num of arr) { cur.next = new ListNode(num); cur = cur.next; } return dummy.next; } // 3. 链表 => 数组(方便打印看结果) function listToArray(head) { let res = []; while (head) { res.push(head.val); head = head.next; } return res; }

下面所有题直接复制就能调试~


1. 反转链表 206

function reverseList(head) { let prev = null; let cur = head; while (cur) { let next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; } // 测试 let head = arrayToList([1,2,3,4,5]); console.log(listToArray(reverseList(head))); // [5,4,3,2,1]

2. 合并两个有序链表 21

function mergeTwoLists(l1, l2) { let dummy = new ListNode(); let cur = dummy; while (l1 && l2) { if (l1.val < l2.val) { cur.next = l1; l1 = l1.next; } else { cur.next = l2; l2 = l2.next; } cur = cur.next; } cur.next = l1 || l2; return dummy.next; } // 测试 let l1 = arrayToList([1,2,4]); let l2 = arrayToList([1,3,4]); console.log(listToArray(mergeTwoLists(l1, l2))); // [1,1,2,3,4,4]

3. 删除排序链表中的重复元素 83

function deleteDuplicates(head) { let cur = head; while (cur && cur.next) { if (cur.val === cur.next.val) { cur.next = cur.next.next; } else { cur = cur.next; } } return head; } // 测试 let head = arrayToList([1,1,2,3,3]); console.log(listToArray(deleteDuplicates(head))); // [1,2,3]

4. 环形链表 141

function hasCycle(head) { let slow = head, fast = head; while (fast && fast.next) { slow = slow.next; fast = fast.next.next; if (slow === fast) return true; } return false; } // 测试 let head = arrayToList([3,2,0,-4]); head.next.next.next = head; // 造环 console.log(hasCycle(head)); // true

5. 链表的中间节点 876

function middleNode(head) { let slow = head, fast = head; while (fast && fast.next) { slow = slow.next; fast = fast.next.next; } return slow; } // 测试 let head = arrayToList([1,2,3,4,5]); console.log(listToArray(middleNode(head))); // [3,4,5]

6. 删除链表的倒数第 N 个节点 19

function removeNthFromEnd(head, n) { let dummy = new ListNode(0, head); let fast = dummy, slow = dummy; for (let i = 0; i <= n; i++) fast = fast.next; while (fast) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return dummy.next; } // 测试 let head = arrayToList([1,2,3,4,5]); console.log(listToArray(removeNthFromEnd(head, 2))); // [1,2,3,5]

7. 回文链表 234

function isPalindrome(head) { let slow = head, fast = head; let prev = null; while (fast && fast.next) { fast = fast.next.next; let next = slow.next; slow.next = prev; prev = slow; slow = next; } while (prev) { if (prev.val !== slow.val) return false; prev = prev.next; slow = slow.next; } return true; } // 测试 let head = arrayToList([1,2,2,1]); console.log(isPalindrome(head)); // true

8. 相交链表 160

function getIntersectionNode(headA, headB) { let a = headA, b = headB; while (a !== b) { a = a ? a.next : headB; b = b ? b.next : headA; } return a; } // 测试逻辑略,本地可直接跑 LeetCode 用例

9. 移除链表元素 203

function removeElements(head, val) { let dummy = new ListNode(0, head); let cur = dummy; while (cur.next) { if (cur.next.val === val) { cur.next = cur.next.next; } else { cur = cur.next; } } return dummy.next; } // 测试 let head = arrayToList([1,2,6,3,4,5,6]); console.log(listToArray(removeElements(head, 6))); // [1,2,3,4,5]

本地怎么用?

  1. 复制最上面通用工具函数
  2. 复制任意一道题
  3. 运行 → 自动出结果

超级方便!

http://www.jsqmd.com/news/941146/

相关文章:

  • 企业网络割接避坑指南:为什么你的深信服AD配置完上不了网?
  • 从零开始:用Docker在Mac上5分钟搞定PostgreSQL 15开发环境(附常用命令速查)
  • 从收音机到手机:三极管放大电路三种组态(共射、共集、共基)在实际产品中的经典应用拆解
  • AdaMamba:自适应Mamba模型在时间序列预测中的创新应用
  • 别再只会拖路由器了!EVE-NG里用VPCS模拟真实PC的5个实战场景(附完整命令清单)
  • 从GPON到400G:家庭宽带里的‘B+’和数据中心里的‘PAM4’到底在讲什么?
  • 工业质检实战:用YOLOv8+DCNv4搞定NEU-DET钢材缺陷检测,mAP提升到0.737的保姆级配置
  • 从关键词匹配到语义理解:构建智能混合搜索系统的核心技术与实践
  • 告别‘炼丹’:用ACGAN、SGAN和cGAN玩转可控图像生成(附PyTorch实战代码)
  • 别再只调API了!手把手教你从H.264裸流到FLV封装的底层实现(附SPS/PPS处理避坑指南)
  • CST时域求解器仿真总是不收敛?手把手教你调准Accuracy和Maximum Duration
  • Matlab版男女声单通道分离工具:基于NMF的免训练盲分离实现
  • 从WWW大会看知识图谱与协同过滤:理论到工程实践指南
  • 【真实经验分享】ORA-03113 ORA-7445[evaopn3()+240]根因定位:从通信中断到内核空指针崩溃的完整排查实录
  • 少女前线蓝蝶契约体力恢复时间 少女前线蓝蝶契约体力怎么恢复
  • 无界方差下SGD的理论极限与PASTA算法:从下界恶化到正则化锚定
  • 外贸独立站系统0佣金建站技术方案:新手快速落地实操指南
  • 如何在3分钟内为Windows系统安装macOS风格鼠标指针的完整指南
  • 基于云计算与NLP的情绪分析:从数据采集到业务洞察的工程实践
  • 如何快速免费解锁QQ音乐加密文件:qmcdump解码工具终极指南
  • Ki67抗体(MIB-1):解码细胞增殖的利器
  • WeFlow:可视化前端工作流工具的核心价值与技术架构创新
  • freeswitch配置会议室
  • 3分钟解锁中文GitHub:告别英文界面困扰的终极解决方案
  • 多核处理器软硬件协同优化:从性能瓶颈到高效编程实践
  • Selenium自动化测试遇到shadow-root别慌,手把手教你两种JavaScript定位方法(附Python代码)
  • 别再只会用RC电路了!手把手教你用Multisim设计三种二阶有源低通滤波器(附参数计算)
  • MinGW静态链接三件套:libgcc_s_seh-1、libstdc++-6和libwinpthread-1,一篇讲透
  • 鸣潮模组终极指南:3分钟解锁15+隐藏功能,游戏体验全面升级
  • 3分钟完成桌面股票监控:TrafficMonitor股票插件终极配置指南