자료구조

LinkedList - Java

Stitchhhh 2025. 4. 27. 17:03

지난 포스트인 ArrayList를 이어서 이번에는 LinkedList에 대해서 정리해보겠습니다.

LinkedList

  • Java 컬렉션 프레임워크(Collection Framework) 중 하나로, 노드 기반으로 구현된 자료구조입니다.
  • 각 요소(Node)가 **데이터(data)**와 **다음 노드(next)**에 대한 참조를 가지고 있어, 삽입과 삭제가 효율적입니다.

주요 특징

자료구조 내부적으로 **노드(Node)**를 연결하여 구성
크기 조정 삽입/삭제할 때 별도 크기 확장이 필요 없음 (공간은 노드 단위로 동적으로 사용)
접근 속도 인덱스 접근 시 느림 (O(N)) (앞에서부터 순차 탐색)
삽입/삭제 속도 처음/끝 삽입·삭제는 빠름 (O(1)), 중간은 느림 (O(N))
중복 허용 O (같은 값을 여러 번 저장 가능)
null 허용 O (null 값 저장 가능)

대표 메서드

package structure.linkedlist;

import java.util.List;

public class LinkedListClass {

    private final List<Integer> linkedList;

    public LinkedListClass(List<Integer> linkedList) {
        this.linkedList = linkedList;
    }

    // 리스트의 지정된 위치에 값을 삽입합니다.
    // 시간 복잡도: O(n) (중간 삽입 시 노드를 탐색해야 하기 때문)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public List<Integer> offer(int index, int value) {
        ((java.util.LinkedList<Integer>) this.linkedList).add(index, value);
        return this.linkedList;
    }

    // 리스트의 첫 번째에 값을 삽입합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public List<Integer> offerFirst(int value) {
        ((java.util.LinkedList<Integer>) this.linkedList).addFirst(value);
        return this.linkedList;
    }

    // 리스트의 마지막에 값을 삽입합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public List<Integer> offerLast(int value) {
        ((java.util.LinkedList<Integer>) this.linkedList).addLast(value);
        return this.linkedList;
    }

    // 리스트에서 지정된 위치의 요소를 제거합니다.
    // 시간 복잡도: O(n) (중간 삭제 시 노드를 탐색해야 하기 때문)
    // 예외 발생: IndexOutOfBoundsException - 인덱스가 리스트 범위를 벗어난 경우
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public List<Integer> poll(int index) {
        ((java.util.LinkedList<Integer>) this.linkedList).remove(index);
        return this.linkedList;
    }

    // 리스트의 첫 번째 요소를 제거합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NoSuchElementException - 리스트가 비어 있는 경우
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public List<Integer> pollFirst() {
        ((java.util.LinkedList<Integer>) this.linkedList).removeFirst();
        return this.linkedList;
    }

    // 리스트의 마지막 요소를 제거합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NoSuchElementException - 리스트가 비어 있는 경우
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public List<Integer> pollLast() {
        ((java.util.LinkedList<Integer>) this.linkedList).removeLast();
        return this.linkedList;
    }

    // 지정된 인덱스의 요소를 반환합니다.
    // 시간 복잡도: O(n) (인덱스를 찾아야 하기 때문)
    // 예외 발생: IndexOutOfBoundsException - 인덱스가 리스트 범위를 벗어난 경우
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public int get(int index) {
        return this.linkedList.get(index);
    }

    // 리스트에 지정된 값이 포함되어 있는지 확인합니다.
    // 시간 복잡도: O(n) (리스트를 순차적으로 검색)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public boolean contains(int value) {
        return this.linkedList.contains(value);
    }

    // 리스트에서 지정된 값의 첫 번째 인덱스를 반환합니다.
    // 시간 복잡도: O(n) (리스트를 순차적으로 검색)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public int indexOf(int value) {
        return this.linkedList.indexOf(value);
    }

    // 리스트의 모든 요소를 제거합니다.
    // 시간 복잡도: O(1) (참조를 제거하는 작업)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public void clear() {
        this.linkedList.clear();
    }

    // 리스트의 요소 개수를 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - linkedList가 null인 경우
    public int size() {
        return this.linkedList.size();
    }
}

'자료구조' 카테고리의 다른 글

ArrayList - Java  (0) 2025.04.27
자료구조 정의  (0) 2025.04.27