연결 리스트(Linked List)
- 원소들을 저장할 때 그 다음 원소가 있는 위치를 포함시켜 저장하는 방식의 선형 자료구조
특징
- K번째 원소를 확인/변경하기 위해 O(k)가 필요
- 임의의 위치에 원소를 추가/제거는 O(1)
종류
- 단일 연결 리스트(Singly Linked List)
- 각 원소가 자신의 다음 원소의 주소를 포함하고 있음
- 이전 원소가 무엇인지 알 수 없음
- 마지막 노드의 링크값은 null
- 원형 연결 리스트(Circle Linked List)
- 끝이 처음과 연결되어 있음
- 마지막 노드의 링크가 첫 번째 노드를 가리킴
- 각 원소가 자신의 이전 원소와 다음 원소의 주소 둘 다 포함하고 있어도 상관없음
- 이중 연결 리스트(Doubly Linked List)
- 각 원소가 자신의 이전 원소와 다음 원소의 주소 둘 다 포함하고 있음
- 이전 원소가 무엇인지 알 수 있음
- 메모리를 더 많이 사용

시간복잡도
| 배열 | 연결 리스트 |
|---|
| k 번째 원소의 접근 | O(1) | O(k) |
| 임의 위치에 원소 추가/제거 | O(N) | O(1) |
| 메모리 상의 배치 | 연속 | 불연속 |
| 추가적으로 필요한 공간 | - | O(N) |
구현
LinkedList<Integer> list = new LinkedList<>();
LinkedList<Integer> list2 = new LinkedList<Integer>(Arrays.asList(1,2));
list.addFirst(1)
list.addLast(5)
list.add(6)
list.add(2, 3)
list.removeFirst()
list.removeLast()
list.remove(2)
list.clear()
list.size()
list.isEmpty()
list.contains(3)
list.indexOf(1)
list.lastIndexOf(1)
list.get(1)
list.subList(3, 5)
list.set(3, 6)
list.toArray()