Geon

Deque 본문

코딩테스트

Deque

jgkim1008 2024. 1. 7. 14:51

class Node {
    var value: Int
    var nextNode: Node?
    var prevNode: Node?

    init(value: Int = 0, next: Node? = nil, prev: Node? = nil) {
        self.value = value
        self.nextNode = next
        self.prevNode = prev
    }
}

class LinkedList {
    var size: Int = 0
    var head: Node?
    var tail: Node?

    func insertBack(value: Int) {
        let newNode = Node(value: value)
        if head == nil {
            head = newNode
            tail = newNode
        } else {
            tail?.nextNode = newNode
            newNode.prevNode = tail
            tail = tail?.nextNode
        }
        size += 1
    }

    func insertAt(idx: Int, value: Int) {
        let newNode = Node(value: value)
        if idx == 0 {
            newNode.nextNode = head
            head?.prevNode = newNode
            head = newNode
        } else {
            var current = head
            for _ in 0..<(idx - 1) {
                current = current?.nextNode
            }
            newNode.nextNode = current?.nextNode
            current?.nextNode?.prevNode = newNode

            current?.nextNode = newNode
            newNode.prevNode = current
        }
        size += 1
    }

    func removeBack() {
        tail = tail?.prevNode
        tail?.nextNode = nil
        size -= 1
    }

    func removeAt(idx: Int) {
        if idx == 0 {
            head = head?.nextNode
            head?.prevNode = nil
        } else {
            var current = head
            for _ in 0..<(idx - 1) {
                current = current?.nextNode
            }
            current?.nextNode = current?.nextNode?.nextNode
            current?.nextNode?.prevNode = current
        }
        size -= 1
    }

    func get(idx: Int) -> Int? {
        var current = head
        for _ in 0..<idx {
            current = current?.nextNode
        }
        return current?.value
    }

    func set(idx: Int, value: Int) {
        var current = head
        for _ in 0..<idx {
            current = current?.nextNode
        }
        current?.value = value
    }

    func printList() {
        var current = head
        while let node = current {
            print(node.value, terminator: "")
            current = node.nextNode
            if current != nil {
                print("->", terminator: "")
            }
        }
        print()
    }
}

'코딩테스트' 카테고리의 다른 글

Valid Parentheses  (0) 2024.01.09
Design Browser History  (0) 2024.01.07
Two Pointer  (2) 2024.01.06
제한 조건 보는 법  (0) 2024.01.04
FrogRiverOne  (0) 2022.05.15