双链表对于算法题而言经常会使用到,所以单独拿出双链表进行讲解。
双链表在java中实现了list和Deque接口,可以实现所有的可选的list操作,并且也允许所有的元素存在,包括null元素。
LinkedList主要方法:
- peekFirst (E)
用于获取双端列表头的数据
之所以选择peekFirst而不选择getFirst的原因在于get方法中,如果获取数据为null的话则抛出异常,而peek方法只返回null。
public E peekFirst() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}
public E getFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
- peekLast(E)
用于获取双端列表的末尾数据
public E peekLast() {
final Node<E> l = last;
return (l == null) ? null : l.item;
}
- pollFirst(E)
将首位数据抛出
同理,不选择remove而选择poll同样是因为如果poll的元素为空,则返回null而不是抛出异常。
public E pollFirst() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}
public E removeLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return unlinkLast(l);
}
- pollLast(E)
将末尾数据抛出,道理同上
public E pollLast() {
final Node<E> l = last;
return (l == null) ? null : unlinkLast(l);
}
- addFirst(void)
将数据添加到首位
addFirst跟push方法完全相同,执行的是相同的操作。
public void push(E e) {
addFirst(e);
}
- addLast(void)
将数据添加到末尾 - contains(boolean)
判断是否包含当前元素
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
- size(int)
返回当前双端链表的大小
public int size() {
return size;
}
双端函数在算法题中出现次数最多的应该就是以上的方法,其他也包含一些addAll此类的方法,在算法中用处不大,不再赘述。