单向链表是指节点中的指针域只有一个,指针域只能沿着同一个方向移动的链表。Java.util包中提供了LinkedList,此LinkedList是基于双向链表实现的。本文基于单向链表实现LinkedList中的某些方法,主要是学习使用下单向链表这种数据结构。
首先给出节点类,节点类中包含数据域value,和指针域next,以及三个构造函数。
class Entry {
E value;//数据域
Entry next;//指针域
Entry() {}
Entry (E value){
this.value = value;
}
Entry (E value, Entry next){
this.value = value;
this.next = next;
}
}
为了方便处理链表中的插入,删除和查找操作,在链表的开始结点之前,增加一个head节点,此head节点指向开始结点。这样好处为:
- 开始结点的地址存放在了head节点中,这样开始结点的操作和其他节点的操作一样,无需特殊处理。
- 不论链表是否为空,其头结点的指针是指向开始节点的非空节点(只不过空链表时,头结点的指针域next为null)。空链表的处理和非空链表一样了。
我们将LinkedList类实现java.util.List<E>接口,尽可能的实现java.util.List<E>中的方法。实现的java.util.List<E>接口方法如下
返回值 | 方法 | 说明 |
boolean | add(E e) | 将特定元素e添加到List中 |
void | add(int index, E element) | 在索引index处添加给定的元素 |
boolean | addAll(Colleaction<? extends E> c) | 将集合c中的元素全部加入List中 |
boolean | addAll(intindex, Collection<?extendsE> c) | 在给定位置,添加集合c中的元素 |
int | size() | 返回链表中的元素个数 |
E | get(int index) | 获取下标为index的元素 |
boolean | isEmpty() | List为空时,返回true |
boolean | remove(Object o) | 移除链表中第一个元素值为o的元素。 |
boolean | removeAll(Collection<?> c) | 从链表中移除c中所有的元素。 |
E | remove(int index) | 删除index处的元素 |
E | set(int index, E element) | 将index处的值设置为元素element。 |
int | indexOf(Object o) |
返回元素o在链表中第一次出现的索引位置,未出现返回-1 |
boolean | contains(Object o) | 如果List中包含元素o则,返回true;否则false |
boolean | containsAll(Collection<?> c) | List中是否包含集合c中的全部元素,是返回true,否则false |
void |