Java:删除链接列表中的所有元素

Sup*_*Man 5 java linked-list

在Java中,如何在使用已有clear()方法的情况下删除链表中的所有元素?这项练习的灵感来自于电话采访中收到的问题.

说我可以用C做到这一点

void DeleteAllElement( ListElement **head ) {  
    ListElement *deleteMe = *head;  
    while( deleteMe )  {  
        ListElement *next = deleteMe->next;  
        delete deleteMe;  
        deleteMe = next;  
    }  
    *head = NULL;  
}
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 11

Java具有自动垃圾收集功能,因此您只需将Head引用设置为null:

myList.headNode = null;

所以,假设我们有一个类LinkedList,它也有一个resetList函数......

public class LinkedList{
     private Node head;
     public Node find(Key k){ ... }
     public void add(Node n){ ... }
     ...
     public void reset(){ head = null;}
     public static void reset(LinkedList l){l.reset();}
}
Run Code Online (Sandbox Code Playgroud)

如果我们不将head节点设为私有,我们可以简单地执行我发布的第一个代码片段.


Ste*_*n C 8

如果您正在谈论的实例java.util.LinkedList:

    while (!linkedlist.isEmpty()) {
        linkedlist.removeFirst();
    }
Run Code Online (Sandbox Code Playgroud)

如果你在谈论任何一个实例java.util.List:

    while (!list.isEmpty()) {
        list.remove(0);
    }
Run Code Online (Sandbox Code Playgroud)

请记住这remove是一项可选操作.但是,根据列表实现,这可能非常有效.对于ArrayList这样会更好:

    while (!list.isEmpty()) {
        list.remove(list.size() - 1);
    }
Run Code Online (Sandbox Code Playgroud)

另一种选择是迭代列表并调用Iterator.remove()每个元素......也是一个可选操作.(但是,对于某些列表实现,这可能会非常低效.)

如果您正在讨论自定义链表类,那么答案取决于您声明列表类内部数据结构的方式.


我怀疑如果访问者提到了这个clear()方法,他们期望在标准Java集合框架的上下文中得到答案......而不是自定义链表类.