在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节点设为私有,我们可以简单地执行我发布的第一个代码片段.
如果您正在谈论的实例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集合框架的上下文中得到答案......而不是自定义链表类.
| 归档时间: |
|
| 查看次数: |
38418 次 |
| 最近记录: |