- 데이터를 저장하고 다음 노드를 가리키는 링크로 구성된 기본 단위
- 데이터 필드
- 노드가 저장하는 실제 데이터
- 노드가 저장하는 값이나 객체 등을 나타낸다.
- 링크 필드
- 다음 노드를 가리키는 참조를 포함
- 단일 연결 리스트에서는 다음 노드를 가리키는 링크만 있고,
- 이중 연결 리스트에서는 이전 노드와 다음 노드를 가리키는 두 개의 링크가 있다.
class Node {
// 데이터 필드
int data;
// 링크 필드 (다음 노드를 가리키는 참조)
Node next;
// 생성자
public Node(int data) {
this.data = data;
this.next = null; // 초기에는 다음 노드가 없으므로 null로 초기화
}
}각 노드가 데이터와 다음 노드를 가리키는 링크로 이루어져 있다.

각 노드가 데이터, 이전 노드를 가리키는 링크, 다음 노드를 가리키는 링크로 이루어져 있다.

- 연결 리스트는 동적으로 크기를 조절할 수 있다.
- 런타임에 메모리를 할당하고 해제할 수 있다.
- 동적 메모리 할당이라고 한다.
- 특정 위치에 노드를 추가하거나 삭제하는 연산이 효율적이다.
- 특정 위치의 노드에 직접
접근하는 데 O(n)의 시간 복잡도(선형)를 가진다.- 처음부터 순차적으로 검색하기 때문
- 노드를
삽입, 삭제하는 데 O(1)의 시간 복잡도(상수)를 가진다.- 중간 삽입 없이 맨 앞과 맨 뒤에만 삽입한다면 O(1)의 시간 복잡도를 갖는다.
- 그렇지 않다면 삽입할 위치를 찾고 삽입 연산을 진행하기 때문에 O(n)의 시간 복잡도를 가진다.
- 각 노드가 독립적으로 메모리에 할당되기 때문에 동적으로 크기를 조절할 수 있다.
- Array의 경우, 데이터를 삽입하여 모든 공간이 꽉 차게 되면 새로운 메모리 공간을 할당받아 옮겨야 하지만,
- LinkedList는 추가할 때마다 동적으로 메모리 공간을 할당받는다.
- 특정 위치의 노드에 접근하려면 처음부터 순차적으로 찾아가야 한다.
- 특정 인덱스에 빠르게 접근하는 것이 배열보다 느리다.
- 각 노드에는 데이터와 링크를 위한 추가적인 메모리가 필요하다.
- 연결 리스트는 각 노드를 따라가야 하므로 메모리 사용이 더 많을 수 있다.
연결 리스트는 삽입과 삭제가 빈번한 상황에서 효율적으로 사용된다.