题解 | #16.删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
注意:
1.设置伪结点,方便处理
3.当遇到当前节点值和下一节点值相等的节点时,进行while循环找到下一个不相等的节点,挂到prev节点上
4.当遇到当前节点值和下一节点值不相等的节点时,prev和curr都移动到下一个节点接着遍历就行
function deleteDuplicates( head ) {
if(head==null || head.next==null)
return head;
let dummy = new ListNode(-9999);
dummy.next = head;
let pre = dummy;
let cur = head;
while(cur!=null && cur.next!=null){
if(cur.val == cur.next.val){
let temp = cur.next;
while(temp!=null && temp.val == cur.val)
temp = temp.next;
pre.next = temp;
cur = temp;
}else{
pre = pre.next;
cur = cur.next;
}
}
return dummy.next;
}
module.exports = {
deleteDuplicates : deleteDuplicates
};
另一种
function deleteDuplicates( head ) {
if(head==null || head.next==null) return head;
let empty = new ListNode(-100),
pre = empty;
while(head){
let flag = false;
let val = head.val;
let temp = head.next;
while(temp && temp.val == val){
flag = true;
temp = temp.next;
}
if(flag==false){
pre.next = head;
head = head.next;
pre = pre.next;
}else{
head = temp;
}
}
pre.next = null;
return empty.next;
}