Java LinkedList

LinkedList 的双向链表结构、首尾操作与作为栈/队列使用。

Beginner
Key PointsLinkedList 两端增删 O(1)、随机访问 O(n);同时实现 List 和 Deque,可当栈或队列用。

创建 LinkedList

new LinkedList<>() starts empty and supports add / get like ArrayList. The difference is the backing structure: indexed access walks the chain, so get(i) inside a loop degrades to O(n²).

Java
import java.util.LinkedList;

public class LinkedListBasic {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();

        list.add("a");
        list.add("b");

        System.out.println(list);
        System.out.println(list.get(1));
        System.out.println(list.size());
        System.out.println(list.getFirst());
        System.out.println(list.getLast());
    }
}
Output
[a, b]
b
2
a
b

首尾操作

addFirst / addLast insert at the ends and removeFirst / removeLast delete there, all O(1) — the case where a linked list beats an array.

Java
import java.util.LinkedList;

public class LinkedListEnds {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();

        list.addLast(1);
        list.addLast(2);
        list.addFirst(0);

        System.out.println(list);
        System.out.println(list.removeFirst());
        System.out.println(list.removeLast());
        System.out.println(list);
    }
}
Output
[0, 1, 2]
0
2
[1]

作为栈和队列

push / pop give stack semantics at the head, while offer / poll give queue semantics (tail in, head out). In single-threaded code ArrayDeque is faster; LinkedList is mostly used as a List.

Java
import java.util.LinkedList;

public class LinkedListStackQueue {
    public static void main(String[] args) {
        LinkedList<Integer> stack = new LinkedList<>();
        stack.push(1);
        stack.push(2);
        System.out.println(stack.pop());

        LinkedList<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        System.out.println(queue.poll());
        System.out.println(queue);
    }
}
Output
2
1
[2]

Friends & Partners