Swift
Swift - Linked List 구현 연습 #Reverse Linked List
버그잡이
2022. 4. 10. 11:40
아래 영상을 보고 학습한 내용을 정리한 글임을 밝힙니다.
https://www.youtube.com/watch?v=Msv0D5zwmHQ
import Foundation
final class ListNode {
// ListNode는 본인의 값(value)와 다음 값의 포인터(next)를 가지고 있는 객체이다.
let value: Int
var next: ListNode?
init(value: Int) {
self.value = value
}
}
func createLinkedList() -> ListNode {
// 1. value만 있는 node Array를 생성해주고
let nodes: [ListNode] = Array(1...10).map { ListNode(value: $0) }
// 2. head 노드 생성
let head = ListNode(value: 0)
// 3. for문을 활용하여 next를 넣어주면 끝
var current = head
for i in 0..<nodes.count {
current.next = nodes[i]
current = nodes[i]
}
return head
}
func printLinkedList(_ node: ListNode) {
var curr: ListNode? = node
var str = ""
while curr != nil {
str += "\(curr?.value ?? 0) -> "
curr = curr?.next
}
print(str)
}
// ListNode 뒤집기
func reverseLinkedList(_ node: ListNode) -> ListNode? {
var prevNode: ListNode? = nil
var headNode: ListNode? = node
while headNode != nil {
2. 다음 노드는 역전해주기 전에 저장해둔다.
let nextNode = headNode?.next
1. next 노드를 역전해준다.
headNode?.next = prevNode
3. return값을 위해서 prevNode값을 저장해두고, headNode는 미리 저장해둔 nextNode로 치환한다
prevNode = headNode
headNode = nextNode
}
return prevNode
}
반응형