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的执行流程如下:
- 初始head指向第一个值为1的节点,判断
head.val和head.next.val相等,修改head.next指向第三个值为2的节点 - 再次进入循环判断,此时
head.val为1,head.next.val为2,值不相等,执行head = head.next,现在head已经指向值为2的节点 - 此时
head.next为null,循环结束,你返回的head已经是值为2的节点,自然输出结果只有[2]
使用curr作为临时遍历指针的话,curr的移动不会修改head本身的指向,head始终指向链表的第一个节点,最终返回就能得到完整的去重后链表。
内容的提问来源于stack exchange,提问作者Harsh Mishra
相关产品推荐
相关产品推荐

