inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 2편

정리

연결리스트 삭제 중 시간 복잡도 계산

해결된 질문

109

티티티

작성한 질문수 21

0

public E remove(int index) {
        Node<E> removeNode = getNode(index);
        E removedItem = removeNode.item;
        if (index == 0) {
            head = removeNode.next;
        } else {
            Node<E> prev = getNode(index - 1);
            prev.next = removeNode.next;
        }
        removeNode.item = null;
        removeNode.next = null;
        size--;
        return removedItem;
    }

    private Node<E> getNode(int index) {
        Node<E> curr = head;
        for (int i = 0; i < index; i++) {
            curr = curr.next;
        }
        return curr;
    }

MyLinkedList 클래스에 정의된 메서드 중 일부입니다.

 

링크드리스트의 경우 맨 앞 노드를 삭제하는 경우 참조의 조정만으로 삭제할 수 있어 O(1)이 소요된다고 배웠습니다.

 

연결리스트 내부의 필드로 가지고 있는 first를 활용해 바로 참조하지 않고 getNode()를 사용하면 메서드가 갖는 시간 복잡도를 따르지 않나요?

 

getNode()는 평균적으로 O(n)이 걸리는 메서드라 생각해서 이 메서드가 사용되는 remove()의 경우 마찬가지로 O(n)인지, 어차피 getNode()를 사용해도 인덱스 1이니 O(1)로 간주하는지 궁금합니다.

java 객체지향 코딩-테스트 알고리즘

답변 1

0

y2gcoder

안녕하세요. 티티티님, 공식 서포터즈 y2gcoder입니다.

말씀하신 것이 맞습니다. 인덱스가 0인 경우에는 getNode(0)이 단 한 번의 접근만 하기 때문에 실제로 O(1) 시간에 첫 번째 노드를 반환합니다. 그래서 첫 번째 노드를 삭제할 때는 getNode()를 호출해도 O(1) 작업만 수행되고, 찾은 노드에 대한 참조를 조정하는 작업 또한 또한 O(1)이므로 첫번째 노드 추가 연산에 대한 시간복잡도 O(1)입니다.

다만, 임의의 인덱스에 대해 삭제하는 경우에는 getNode()가 해당 인덱스까지 노드를 순차적으로 탐색하므로 평균적으로 O(n)의 시간복잡도가 됩니다. 따라서 삭제하려는 노드의 위치에 따라 시간복잡도가 달라진다는 점을 이해하는 것이 중요합니다.

결론적으로, 첫번째 노드를 삭제할 때는 O(1)로 간주하는 것이 맞습니다.

감사합니다.

1

티티티

잘 접근했었군요! 감사합니다!

제네릭 타입 매개변수 제한과 관련한 문의입니다.

0

80

3

강의가 좀 버겁다 느껴질 때 학습방법 문의

1

135

4

제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T

0

62

1

new T()가 안 되는 니유

0

102

1

안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.

0

98

2

자바 로드맵 선택 질문

0

111

2

실전 자바 중급 - 2편 후 추천 강의

0

176

2

실프로젝트에서 Java25버전 사용

0

121

1

Arrays.sort

0

68

1

블로그 작성 시, 저작권 문제에 대하여

0

166

1

중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.

0

94

3

pop()과 poll()의 차이

0

94

1

특정 index의 노드 조회하기 질문

0

66

2

List.of() 비어있는 불변 리스트 생성

0

81

2

문제2: 개 타입 반환

0

56

2

[리뷰] 중급2편까지 겨우 완강 했습니다.

0

114

2

문제와 풀이1 Ex2와 Ex3

0

65

2

노드 삭제시 노드 null값으로 초기화

0

77

2

강의영상에 대한 질문

0

57

1

타입 매개변수 제한

0

59

1

compareTo

0

68

1

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

0

99

3

섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨

0

70

2

퀴즈 오류 관련 문의

0

109

1