给定排序链表的头,删除所有重复项,使每个元素只出现一次。返回已排序的链表。
输入:头=[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;
我试图在leetcode上解决这个问题,并找到了一个我无法理解的解决方案,为什么我们在let curr
中使用head
?而且,如果我试图做同样的事情,而不在另一个变量中取head
,那么我只得到[2]
作为输出。
为什么要在
let curr
中使用head
?
原因有二:
-
curr
需要初始化为something,否则它将有一个未定义的值,使while
条件始终为false,因此不会发生迭代和删除。 -
curr
旨在一个接一个地指代每个(非重复(节点,因此从第一个节点开始是有意义的,即head
。
而且,如果我试图在不在另一个变量中使用
head
的情况下做同样的事情,那么我只得到[2]作为输出。
只有当您也通过return curr
更改return head
时,才会发生这种情况。如果这样做,则将始终返回一个不超过一个节点的列表,因为循环完成后,curr
将引用列表中的最后一个节点(如果它不为空(。
为了返回列表中的所有节点,您需要始终返回其第一个节点,这就是head
所代表的。