koranidro.hashnode.dev[TypeScript] 자료 구조로 담아내기. #14 - 연결 리스트(with. 이중 연결)이번 편은 이전 편으로부터 이어집니다. 연결 리스트의 또 다른 형태는 이중 연결 리스트입니다. 후임자의 참조만 저장하는 단일 연결 리스트와 달리 이중 연결 리스트는 선임자의 참조도 함께 저장합니다. interface DoublyLinkedListNode<T> extends DoublyLinkedList<T> { linkBefore(succ: DoublyLinkedListNode<T>): void; linkAfter(pred: D...May 3, 2025·3 min read
koranidro.hashnode.dev[TypeScript] 자료 구조로 담아내기. #13 - 연결 리스트(with. 탐색)이번 편은 이전 편으로부터 이어집니다. null 노드의 도입으로 코드는 한 층 간결해졌습니다. 그럼, 이제 탐색도 마저 구현해 볼까요? class SinglyLinkedListNodeImpl<T> implements SinglyLinkedListNode<T> { search(element: T): SinglyLinkedList<T> { let curr: SinglyLinkedListNode<T> = this; ...Apr 26, 2025·3 min read
koranidro.hashnode.dev[TypeScript] 자료 구조로 담아내기. #12 - 연결 리스트(with. null 노드)이번 편은 이전 편으로부터 이어집니다. 조금 예리하신 분들은 이전 편에서 다룬 헤드 노드만으로는 충분치 않다는 것을 느끼셨을 것입니다. 최소한 첫 노드에 예외를 부여하는 상황은 피했으나 후임자가 null임을 확인하는 구현 또한 만족스럽지는 않습니다. 카이로의 코끼리 카이로의 코끼리에 대해 알고 계십니까? 링크를 통해 확인하실 수 있습니다. 꽤 재밌으므로 한번 읽어 보시길 추천합니다. 여기서 중요한 아이디어는 끝 위치에 미리 코끼리를 둔다는 것...Apr 19, 2025·2 min read
koranidro.hashnode.dev[TypeScript] 자료 구조로 담아내기. #11 - 연결 리스트(with. 헤드 노드)이번 편은 이전 편으로부터 이어집니다. 이전 편에서는 연결 리스트의 접근자는 첫 노드의 선임자가 적절하다는 것을 알았습니다. 얼핏 보기엔 문제없어 보이는데 어떤가요? 최상위 연결 리스트 즉, 가장 처음에 위치한 노드로 시작하는 경우를 생각해 봅시다. 가장 처음에 위치한 노드의 선임자는 무엇인가요? 맞습니다. 선임자가 존재하지 않겠지요. 그럼 어떻게 해야 할까요? 선임자를 가지지 않는 첫 노드를 갖는 연결 리스트에 대해 예외를 적용해야 할까요?...Apr 12, 2025·2 min read
koranidro.hashnode.dev[TypeScript] 자료 구조로 담아내기. #10 - 연결 리스트(with. 연결)이번 편은 이전 편으로부터 이어집니다. 연결 리스트의 연산은 연결을 통해 진행됩니다. 그렇다면 단일 연결 리스트의 연결은 어떻게 이루어질까요? 매우 간단합니다. interface SinglyLinkedListNode<T> extends SinglyLinkedList<T> { linkBefore(succ: SinglyLinkedListNode<T> | null): void; unlink(pred: SinglyLinkedListNo...Apr 5, 2025·3 min read