9.2链表(一)——移除未排序链表中的重复结点

/**
 * 功能:移除未排序链表中的重复结点。
 */
两种方法:
1 /*直接迭代访问整个链表,将每个节点加入散列表。若发现有重复元素,则将该节点从链表中移除,
      然后继续迭代。*/
       /*Hashtable只是起到检查是否重复的作用,操作仍是在链表上*/
       public static void deleteDups(LinkedListNode n ){
             Hashtable table = new Hashtable();
            LinkedListNode pre = null ;
             while ( n != null ){
                   if ( table .containsKey( n . data )){
                         pre . next = n . next ; //移除重复结点
                  } else {
                         table .put( n . data , true );
                         pre = n ;
                  }
                   n = n . next ;
            }
      }
      
 2、   /**不使用缓冲区
       * 用两个指针来迭代:current迭代访问整个链表runner用于检查后续的节点是否重复。
       */
       public static void deleteDups2(LinkedListNode head ){
             if ( head == null )
                   return ;
            LinkedListNode current = head ;
             while ( current != null ){
                  LinkedListNode runner = current ;
                   while ( runner . next != null ){
                         if ( runner . next . data == current . data ){
                               runner . next = runner . next . next ;
                        } else {
                               runner = runner . next ;
                        }
                  }
                   current = current . next ;
            }
      }
}


链表节点:
class LinkedListNode{
      LinkedListNode next = null ;
       int data ;
      
      
      
       public LinkedListNode( int d ){
             this . data = d ;
      }
      
       public void appendToTail( int d ){
            LinkedListNode end = new LinkedListNode( d );
            LinkedListNode n = this ;
             while ( n . next != null ){
                   n = n . next ;
            }
             n . next = end ;
      }
      
       public LinkedListNode deleteNode(LinkedListNode head , int d ){
            LinkedListNode n = head ;
             if ( n . data == d )
                   return head . next ;
            
             while ( n . next != null ){
                   if ( n . next . data == d ){
                         n . next = n . next . next ;
                         return head ;
                  }
                   n = n . next ;
            }
             return head ;
      }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值