본문 바로가기
IT/알고리즘

[Leetcode]641. Design Circular Deque

by 어센트 2020. 10. 6.

Design Circular Deque - LeetCode

 

Design Circular Deque - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

이중 연결리스트를 이용해 원형 데크를 구현하는 문제였다.

파이썬을 이용해 이중 연결리스트를 짜보는 건 처음이었는데 left,right를 따로 초기화 해주지않아도 되어서 다른 언어에 비해 간단한 면이 있었던 것 같다.

 

코드

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class MyCircularDeque:

    def __init__(self, k: int):
        self.head, self.tail = ListNode(None), ListNode(None)
        self.k, self.len = k, 0
        self.head.right, self.tail.left = self.tail, self.head

    def _add(self, node: ListNode, new: ListNode):
        n = node.right
        node.right = new
        new.left, new.right = node, n
        n.left = new

    def _del(self, node: ListNode):
        n = node.right.right
        node.right = n
        n.left = node

    def insertFront(self, value: int) -> bool:
        if self.len == self.k:
            return False
        self.len += 1
        self._add(self.head, ListNode(value))
        return True

    def insertLast(self, value: int) -> bool:
        if self.len == self.k:
            return False
        self.len += 1
        self._add(self.tail.left, ListNode(value))
        return True

    def deleteFront(self) -> bool:
        if self.len == 0:
            return False
        self.len -=1
        self._del(self.head)
        return True

    def deleteLast(self) -> bool:
        if self.len == 0:
            return False
        self.len -= 1
        self._del(self.tail.left.left)
        return True

    def getFront(self) -> int:
        return self.head.right.val if self.len else -1

    def getRear(self) -> int:
        return self.tail.left.val if self.len else -1

    def isEmpty(self) -> bool:
        return self.len ==0

    def isFull(self) -> bool:
        return self.len == self.k

'IT > 알고리즘' 카테고리의 다른 글

[BOJ]1874.스택 수열  (0) 2020.10.07
[Leetcode]23. Merge k Sorted Lists  (0) 2020.10.06
[Leetcode]622. Design Circular Queue  (0) 2020.10.06
[Leetcode]232. Implement Queue using Stacks  (0) 2020.10.06
[Leetcode]225. Implement Stack using Queues  (0) 2020.10.06