遍历链表的时候保留两个指针,prev表示前一个节点,cur表示当前节点。
prev的主要作用是在发现cur节点和后面有重复的时候断掉对cur的连接
在去重的时候我先保留了第一个重复的节点,直到删干净后面的重复节点以后再删除第一个重复节点
function deleteDuplicates( head ) {
// write code here
if(!head||!head.next) return head
let res = new ListNode(0)//指针用来保留结果
res.next = head
let cur = head
let prev = res
while(cur&&cur.next){//如果有一个为null说明指针已经到头了,不会再有重复了
if(cur.val==cur.next.val){//发现重复
while(cur.val==cur.next.val){//开始drop
cur.next = cur.next.next//移除cur后面的一个
if(!cur.next) break//如果移除到底,则停止
}
prev.next = cur.next//drop掉第一个重复节点,即cur
cur = prev.next//重新定位cur
}
else{
prev = cur
cur = cur.next
}
}
return res.next
}
京公网安备 11010502036488号