删除排序链表中的重复节点二
给你一个排序后的重复链表,删除所有出现重复的节点。
解题代码
思路:
- 定义一个虚头,然后判断链表头节点开始是否有重复节点。
- 如果有重复继续遍历,找到下一个不同的节点,移动虚头指针的位置到当前节点。
- 如果没有重复那么当前指针往后走一步,重复此操作直至链表为空。
var deleteDuplicates = function(head) {
if (!head) return null;
let ret = new ListNode(-1,head); // 虚头
let p = ret;
let q;
while (p.next) {
if(p.next.next && p.next.val === p.next.next.val){ // 判断p下一个节点是否有重复
q = p.next.next; // 如果有重复,那么赋值当前下一个节点给q
while (q && q.val === p.next.val) q = q.next; // 如果q的值,等于重复节点的值,那么q继续往后走,直至找到不同节点
p.next = q; // 此时q已经到了不同的节点的位置,将他们连接起来,继续往后循环,直至链表为空
}else {
p = p.next; // 如果没有重复,p往后走一步
}
}
return ret.next; // 处理完之后的新链表头结点。
};