[Swift] (자료구조) 링크드 리스트 / Linked List
2022. 8. 1. 16:47ㆍ🐣/자료구조
Node
import Foundation
class Node<T: Equatable> {
let id: Int
let data: T
var next: Node?
init(id: Int, data: T, next: Node? = nil) {
self.id = id
self.data = data
self.next = next
}
}
LinkedList
struct LinkedList<T: Equatable> {
var head: Node<T>?
var tail: Node<T>?
func showList() {
var now = head
print("===== Linked List ======")
while now != nil {
now?.next == nil
? print("id: \(now?.id) | data: \(now?.data)")
: print("id: \(now?.id) | data: \(now?.data) -> ")
now = now?.next
}
print("========================")
}
}
func add : O(1)
mutating func add(node: Node<T>) {
// head node does not exist
if head == nil {
head = node
tail = node
return
}
// search for last node and attatch new
tail?.next = node
tail = node
}
func searchNode : O(N)
func searchNode(with data: T) -> Node<T>? {
var now = head
while now?.data != data && now != nil {
now = now?.next
}
return now
}
func insert
목표 노드까지 탐색이 선행된 경우 : O(N)
Head, Tail의 앞뒤에 꽂히는 경우 : O(1)
mutating func insert(node: Node<T>, after id: Int) {
var now = head
while now?.id != id && now?.next != nil {
now = now?.next
}
node.next = now?.next
now?.next = node
}
mutating func insert(node: Node<T>, before id: Int) {
var now = head
if now?.id == id {
head = node
node.next = now
return
}
while now?.next?.id != id && now?.next != nil {
now = now?.next
}
node.next = now?.next
now?.next = node
}
func delete
목표 노드까지 탐색이 선행 : O(N)
Head, Tail : O(1)
mutating func delete(node: Node<T>) -> Bool {
var now = self.head
// if target node is at head
if now === node {
if self.head === self.tail { self.tail = nil }
self.head = now?.next
return true
}
while now?.next !== node && now?.next != nil {
now = now?.next
}
// no matching node to delete
if now == nil { return false }
if now?.next === tail {
tail = now
}
// delete node
now?.next = now?.next?.next
return true
}
'🐣 > 자료구조' 카테고리의 다른 글
[Swift] (자료구조) 우선순위 큐 / Priority Queue (0) | 2022.08.26 |
---|---|
[Swift] (자료구조) 큐 / Queue (0) | 2022.08.06 |
[Swift] (자료구조) 힙 / Heap (0) | 2022.08.01 |
[Swift] (자료구조) 더블 링크드 리스트 / Doubly Linked List (0) | 2022.08.01 |
[Swift] (자료구조) 스택 / Stack (0) | 2022.08.01 |