题解 | #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;
}

全部评论

相关推荐

点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务