解题思路
-
因为链表已经是经过升序排列的,所以我们只需要比较当前元素和下一个元素的值的大小;
-
如果当前元素的值等于下一个元素的值,那么删除下一个元素, 在链表中的操作就直接将当前节点的下一个节点, 执行下下个节点;
-
如果值不相等,则将当前指针换后移一个元素,判断下一个元素是否重合,直到结束;
-
为了返回链表的头指针,一开始我们要找个人带跑,保留头指针所在的位置。
var deleteDuplicates = function(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;
};