自己对LinkedList的一些了解
实现了三种数据结构:
借鉴一张图-来自牛客网
1. List链表的实现:
方式如下:
LinkedList<E> ans = new LinkedList<>();
这里表示双端队列,在插入、删除频繁的时候常用,效率较高,但查找节点比较麻烦,用接口:
即获得元素、链表长度、添加元素、删除元素、判断为空、排序、判断是否包含某个元素
2. 队列的 实现:
Queue<Integer> ans = new LinkedList<>();
需要尾部添加元素到队列尾时优先用offer()
查看队头元素优先使用peek()
删除队头元素优先使用poll()
poll()在删除队头的时候还会返回队头
offer和addLast的区别:
- 在不违背队列的容量限制的情况,往队列中添加一个元素,如果添加成功则返回true。
如果因为容量限制添加失败了,则抛出IllegalStateException异常 - 在不违背容量限制的情况,往队列中添加一个元素,如果添加元素成功,返回true,
如果因为空间限制,无法添加元素则,返回false; 在有容量限制的队列中,这个offer方法优于add方法。 因为抛异常处理更加耗时,offer直接返回false的方式更好
3. 栈的 实现:
LinkedList实现栈是将双向链表的尾部作为栈顶,只在链表尾部也就是栈顶进行操作。
LinkedList<Integer> ans = new LinkedList<Integer>();
这个直接这样写就可以,
常用接口
pop()在栈顶删除元素,和remove 效果相同
push()在栈顶添加元素
peek()获得栈顶元素,这里的栈顶是队尾