遍历链表的时候保留两个指针,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 }