LinkedList 类双向链表romove详解

LinkedList list = new LinkedList();
list.add("hello java");//先存一个对象
list.remove("hello java");
-----------------------------
以下为源码:
 public boolean remove(Object o) {
//这里分两种情况讨论
//一.我们传的这个Object o 对象如果是空
//二.如果对象不为空.
//我们属于第二中情况
        if (o == null) {
            for (Node x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
      //情况二:
          //x=first表示从表头开始
          //x!=null 表示只要没有到链表的最后就不停
          //x = x.next 自增,遍历链表
        //通过o.equals(x.item)找到我们的元素
       //进入unlink()方法
            for (Node x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
--------------------------------------------------
 //进入unlink()方法
E unlink(Node x){
      final E element  = x.item;//这个是我们最终要删除的元素
      final Node next = x.next; //next表示被删除元素的下一个节点对象
      final Node prev = x.prev;//prev表示被删除元素的上一个节点对象
     
      if(prev == null){ //如果被删除元素是第一个
             first = next;//如果第一个被删除,next就是当前第一个节点
      }else{//如果被删元素不是第一个

      //被删元素上一个节点对象的next指向被删除元素的下一个节点
             prev.next = next;
             x.prev = null;//被删除元素断开与上一个节点的链接 
      }
     
      if(next == null){//如果被删除元素是最后一个
            last = prev;//删除最后一个节点后,上一个节点就是最后节点           
      }else{//如果不是最后一个
            next.prev = prev;//下一个节点的上一个节点地址指向被删除元素的上一个节点对象
            x.next =null;//被删除元素断开与上一个节点的链接 
      }  
       x.item = null;
       size--;
      mod Count++;
      returen element;

}
LinkedList.png

你可能感兴趣的:(LinkedList 类双向链表romove详解)