2 u010775468 u010775468 于 2016.05.04 19:28 提问

java中的链表类的remove问题

新人初学java,有些基本问题不是很懂,求教各位,谢谢
java中的LinkedList这个链表类中有这样一个方法,removefirst方法,含义是删除,并且返回链表的第一个元素,我想问下各位,是不是只要是删除了第一个元素,那么后面的第二个元素会顶到原来第一个元素的位置上,当我第二次调用这个方法时,相当于删除了链表的第一个元素(原来的第二个元素)?
谢谢各位了

4个回答

eson_15
eson_15   2016.05.04 19:55
已采纳

是的,removeFirst()方法返回链表第一个元素,并且删掉这个元素,当再一次调用该方法时,又会获得第一个元素(原来的第二个)并删除之。给你看一下removeFirst()的源码你就知道了:

 public E removeFirst() {  
        final Node<E> f = first;  
        if (f == null)  
            throw new NoSuchElementException();  
        return unlinkFirst(f); //private方法  
    }  

    private E unlinkFirst(Node<E> f) {  
        // assert f == first && f != null; //需确保f为头结点,且链表不为Null    
        final E element = f.item; //获得节点的值  
        final Node<E> next = f.next; //获得头结点下一个节点  
        f.item = null;  
        f.next = null; // help GC  
        first = next;  
        if (next == null)  
            //如果next为null,则表示f为last结点,此时链表即为空链表   
            last = null;  
        else  
            //修改next的前向指针,因为first结点的前向指针为null   
            next.prev = null;  
        size--;  
        modCount++;  
        return element;  
    }  

具体的关于LinkedList其他问题你可以参考这篇博文http://blog.csdn.net/eson_15/article/details/51135944

eson_15
eson_15 补充一下,删了之后你不能理解为第二个元素顶到第一个元素那,因为链表中是不同的节点,删除了一个节点后,这个节点就会被垃圾回收器回收,他的左右节点还是在原来的位置,地址并没有改变,只是改变了他们前后的指向而已。比如A->B->C,删了B后,A->C,但是A和C的地址不会改变,不能理解为C往左顶了一个位置~
一年多之前 回复
magege2015
magege2015   2016.05.04 19:51

直接看代码
LinkedList list = new LinkedList();
list.add("0");
list.add("1");
list.add("2");
list.add("3");
System.out.println("Before remove-"+list.toString());

    list.remove(0);
    System.out.println("first remove-"+list.toString());
    list.remove(0);
    System.out.println("second remove-"+list.toString());

    输出的结果:Before remove-[0, 1, 2, 3]
                                            first remove-[1, 2, 3]
                                            second remove-[2, 3]
bdmh
bdmh   Ds   Rxr 2016.05.04 20:02

你的理解是对的,每次操作的是当前列表中的第一个对象

u010775468
u010775468   2016.05.04 21:32

谢谢大家的热心帮助,太谢谢了,由于只能采纳一个,请大家见谅,真心感谢各位

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!