我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
思路:
关于链表删除的问题,头节点也要考虑删除。所以这里需要借助虚拟头节点来指向头部,方便处理。
我们需要一个指针在虚拟头节点的位置cur,然后判断头节点的下一个和下下个是否相等,如果相等,将虚拟头节点cur的next指向cur.next.next, 否则 cur进行下一个比较
cur = cur.next
// 代码示例
var deleteDuplicates = function(head) {
if(!head)return head
// 虚拟头
let dummy = {next: head}
let cur = dummy // 用于遍历的指针
while(cur.next && cur.next.next){
if(cur.next.val == cur.next.next.val){
cur.next = cur.next.next
}else{
cur = cur.next
}
}
return dummy.next
}
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 **的数字。
思路
这道题呢和上一道题是不一样的。这道题是需要将重复的元素全部删除。但大致的步骤是一样的,只是我们在比较时cur.next需要指向最后一个重复节点的后面一个节点。
// 代码示例
var deleteDuplicates = function(head) {
if(!head)return head
// 同样这里需要一个虚拟头节点
let dummy = {next: head}
let cur = dummy // 用于遍历的指针
while(cur.next && cur.next.next){
if(cur.next.val == cur.next.next.val){
// 不同点 这里需要一直循环
let x = cur.next.val // 记录一下cur.next的值
while(cur.next && x === cur.next.val){ // 此时cur.next.val是移动后的新值
cur.next = cur.next.next //如果相等 cur.next指向一直向后移动
}
}else{
cur = cur.next
}
}
return dummy.next
}
结束语
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~