버그 잡이

Swift - Linked List 구현 연습 #Reverse Linked List 본문

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
}

 

 

반응형
Comments