Linked list

연결리스트

  • 차례로 연결된 노드를 표현해주는 자료구조

  • 단방향 연결리스트 : 각 노드는 다음 노드를 가리킨다.

  • 양방향 연결리스트 : 각 노드는 다음 노드와 이전 노드를 함께 가리킨다.

  • 장점

    • 리스트의 시작 지점에서 아이템을 추가하거나 삭제하는 연산을 상수 시간안에 할 수 있다는 점

  • 단점

    • 배열과는 다르게, 연결리스트의 경우, 특정 인덱스를 상수 시간에 접근할 수 없다.

      • K번째 원소를 찾고 싶으면 K번 루프를 돌아야하는 셈!

노드

  • <원소, 다음 원소의 주소> 단위로 저장을 해야한다. 이런 단위 구조를 노드라고 한다.

  • <data 필드, link 필드>

연결리스트 만들기

  • head 노드의 주소를 참조하는 방법

  • LinkedList 자료구조를 사용하는 방법

단방향 연결리스트에서 노드를 삭제하는 경우

Runner 기법

  • 연결 리스트를 순회할 때, 두개의 포인터 동시에 사용하는 것

  • 한 포인터가 다른 포인터를 반드시 앞서도록 한다.

  • 앞선 포인터는 따라오는 포인터보다 항상 지정된 개수만큼 앞서도록 할 수 있고, 따라오는 포인터를 여러 노드를 한 번에 뛰어넘도록 설정할 수도 있다.

재귀 문제

  • 재귀 호출 깊이가 n이 될 경우, O(n)만큼의 공간을 사용한다.

  • 모든 재귀는 반복문으로 구현 가능하고 그 반대도 가능하다. 코드는 재귀가 간단하고 시간은 반복문이 더 빠른 것이 보통이다.

Last updated