카테고리 없음

[Algorithms] 파이썬 알고리즘 인터뷰 #13, LeetCode 234번: Palindrome Linked List

gomduribo 2022. 6. 18. 15:19

연결리스트 단원의 첫번째 문제다. 연결리스트가 팰린드롬 구조인지 판단하는 문제인데 책에서는 3가지 풀이법을 제시한다. 1.연결리스트를 리스트로 변환하는 방법 , 2. Deque를 활용하는 방법, 3.Runner을 활용한 풀이를 제시하는데 그중에 난 2번 만 정리해 두려고한다. 3번 너무 귀찮아요ㅋ

 

Deque를 이용한 최적화

 

Deque의 장점의 popleft와 pop을 이용해서 양 끝단의 값을 손쉽게 받을 수 있다는 것이다. 이런 팰린드롬 여부를 확인하는 문제를 해결 할때 딱일거같다. 

 

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def isPalindrome(self, head: Optional[ListNode]) -> bool:
    	# Deque 선언
        q: Deque = collections.deque()
        
        # 빈 연결리스트는 팰린드롬이다
        if not head:
            return True
        
        node = head
        
        # deque인 q에 연결리스트를 복사해 준다. 
        while node is not None:
            q.append(node.val)
            node = node.next
            
        while len(q) > 1:
            if q.popleft() != q.pop():
                return False
        
        return True

 

간단하게 deque를 이용해서 해결할수 있다!