zoukankan      html  css  js  c++  java
  • 链表----删除链表中重复的节点

    删除链表中重复的节点:

    方法一:采用递归的方法,但这种方法在链表无重复节点时效率不高

    function deleteDuplication(pHead)
    
    {
    
        if(pHead==null||pHead.next==null){//判断没有节点或只有一个节点的情况
    
            return pHead
    
        }
    
      
    
        if(pHead.val==pHead.next.val){//如果两个节点重复时
    
             let node=pHead.next
    
             while(node!=null&&node.val==pHead.val){//找到所有重复的节点
    
                 node=node.next
    
             }
    
            return deleteDuplication(node)//采用递归的方法从下一个不重复的点开始
    
        }else{
    
             pHead.next= deleteDuplication(pHead.next)//保留当前节点,从下一个节点继续
    
             return pHead
    
        }
    
    }

    方法二:

    1. 添加一个头节点,以方便碰到第一个第二个节点就相同的情况
    2. 设置pre,cur指针,pre指针指向当前确定不重复的那个节点,而cur指针一直往后搜索。
    function deleteDuplication(pHead)
    
    {
    
     if (pHead === null || pHead.next === null) {
    
        return pHead;
    
      }
    
      const Head = new ListNode(0); // 重要,方便处理第一个、第二个节点就是相同的情况。
    
      Head.next = pHead;
    
      let pre = Head;
    
      let cur = Head.next;
    
      while (cur !== null) {
    
        if (cur.next !== null && cur.val === cur.next.val) {
    
          // 找到最后的一个相同节点,因为相同节点可能重复多个
    
          while (cur.next !== null && cur.val === cur.next.val) {
    
            cur = cur.next;
    
          }
    
          pre.next = cur.next;
    
          cur = cur.next;
    
        } else {
    
          pre = pre.next;
    
          cur = cur.next;
    
        }
    
      }
    
    return Head.next;
    
    }
  • 相关阅读:
    网络编程
    初识正则表达式
    面向对象---内置函数,反射,内置方法
    面向对象----属性,类方法,静态方法
    面向对象--抽象类,多态,封装
    面向对象--继承
    初识面向对象
    类名称空间,查询顺序,组合
    经典例题
    ⽣成器和⽣成器表达式
  • 原文地址:https://www.cnblogs.com/mlebk/p/12410182.html
Copyright © 2011-2022 走看看