Untitled

Untitled

Untitled

단방향 연결리스트

연결 리스트는 연속되지 않은 메모리에 저장된 데이터들을 연결시켜 놓은 것

이때 연결을 어떻게 하냐면 내 다음 순서 데이터의 주소값을 내가 가지고 있어야 함

따라서, 단방향 연결 리스트의 경우,데이터의 모양이 다음과 같이 생겼음

Untitled

//Node 생성

class Node<T> {
    var data: T?
    var next: Node?
    
    init(data: T?, next: Node? = nil) {
        self.data = data
        self.next = next
    }
}

/** 데이터를 저장하고 싶을 때마다 배열의 element가 아니라,
이 Node를 생성해서 연결해주면 됨!
근데 노드를 매번 생성하고 이전 노드와 연결해주는 것을 일일이 매번 코딩할 수 없으니,
Node를 관리해주는 LinkedList라는 클래스를 다음과 같이 만들어 보겠음! */

class LinkedList<T> {
}

head : 가장 첫 노드를 가리키는 프로퍼티

inkedList에 head라는 프로퍼티를 추가해줄 것임 왜냐? 연결 리스트는 앞서 말했듯이 데이터들이 '연결' 되어 있는 구조이고, 만약 특정 데이터에 접근하려면, 첫 번째 노드부터 순차적으로 접근해야 한다고 했음! 때문에 연결 리스트에서는 첫 번째 노드를 항상 가지고 있어야 하고, 이를 head로 가리키는 것임!

위 예제에서는 가장 첫번째에 있는 3이란 data를 갖고 있는 노드가 head가 되는 것임!

class LinkedList<T> {
    private var head: Node<T>?
}

append(data:) : 연결 리스트 맨 마지막에 노드 추가하기

배열과 빗대어서 생각해보셈!