You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript有序链表去重:为什么要将head赋值给curr变量?

排序链表去重问题说明

题目描述

给定已排序的链表头节点head,删除所有重复元素,使每个元素仅出现一次,返回排序后的链表。

示例输入:head = [1,1,2]
输出:[1,2]

参考解法代码

let curr=head;
while(curr && curr.next){
    if(curr.val===curr.next.val){
        curr.next=curr.next.next;
    } else {
        curr=curr.next;
    }
}
return head;

疑问解答

为什么要把head赋值给临时变量curr,不能直接操作head?

  • head存储的是整个链表的起始节点引用,题目要求返回去重后的完整链表,本质就是要返回这个起始节点的引用。
  • 如果你直接用head作为遍历指针,在执行head = head.next这一步时,head的指向就会往后移动,丢失最开始的起始节点位置。

拿输入[1,1,2]举例,直接操作head的执行流程如下:

  1. 初始head指向第一个值为1的节点,判断head.val和head.next.val相等,修改head.next指向第三个值为2的节点
  2. 再次进入循环判断,此时head.val为1,head.next.val为2,值不相等,执行head = head.next,现在head已经指向值为2的节点
  3. 此时head.next为null,循环结束,你返回的head已经是值为2的节点,自然输出结果只有[2]

使用curr作为临时遍历指针的话,curr的移动不会修改head本身的指向,head始终指向链表的第一个节点,最终返回就能得到完整的去重后链表。

内容的提问来源于stack exchange,提问作者Harsh Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:36:04