일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬 데이터분석
- 파이썬 머신러닝
- 하이퍼레저 패브릭
- Adapter 패턴
- 블록체인
- 플레이프레임워크
- 엔터프라이즈 블록체인
- 스위프트
- 그라파나
- Golang
- CORDA
- 스칼라
- Play2
- Hyperledger fabric gossip protocol
- 하이브리드앱
- Play2 로 웹 개발
- 안드로이드 웹뷰
- play2 강좌
- Akka
- 주키퍼
- 파이썬
- Actor
- play 강좌
- 파이썬 강좌
- 이더리움
- akka 강좌
- 스칼라 강좌
- hyperledger fabric
- 파이썬 동시성
- 스칼라 동시성
- Today
- Total
HAMA 블로그
[Swift 3.0] LinkedList 본문
import Foundation
public class Node<T> {
var value: T
var next: Node<T>?
weak var previous: Node<T>?
init(value: T) {
self.value = value
}
}
public class LinkedList<T> {
private var head: Node<T>?
private var tail: Node<T>?
public var isEmpty: Bool {
return head == nil
}
public var first: Node<T>? {
return head
}
public var last: Node<T>? {
return tail
}
public func append(value: T) {
let newNode = Node(value: value)
if let tailNode = tail {
newNode.previous = tailNode
tailNode.next = newNode
} else {
head = newNode
}
tail = newNode
}
public func nodeAt(index: Int) -> Node<T>? {
if index >= 0 {
var node = head
var i = index
while node != nil {
if i == 0 { return node }
i -= 1
node = node!.next
}
}
return nil
}
public func removeAll() {
head = nil
tail = nil
}
public func remove(node: Node<T>) -> T {
let prev = node.previous
let next = node.next
if let prev = prev {
prev.next = next
} else {
head = next
}
next?.previous = prev
if next == nil {
tail = prev
}
node.previous = nil
node.next = nil
return node.value
}
}
extension LinkedList: CustomStringConvertible {
public var description: String {
var text = "["
var node = head
while node != nil {
text += "\(node!.value)"
node = node!.next
if node != nil { text += ", " }
}
return text + "]"
}
}
'아이폰 (IOS) ' 카테고리의 다른 글
[Swift 3.0] Background Mode 이해하기 (1) | 2016.12.01 |
---|---|
[Swift 3.0] Queue (0) | 2016.11.24 |
[Swift 3 ] 가장 쉬운 소켓 (TCP) 통신 방법을 찾고 계신가요? (2) | 2016.11.24 |
iOS 개발에서 스토리보드 란 무엇인가? (0) | 2016.11.22 |
iOS 와 안드로이드에서의 병렬 쓰레드 개발 (AsyncTask 와 GCD) (0) | 2016.11.21 |