Python 04. [Algorithm 07] 연결 리스트
Python 04. [Algorithm 07] 연결 리스트
연결 리스트 (Linked List)
연결 리스트는 데이터 요소의 선형 집합으로, 데이터의 순서가 메모리에 물리적인 순서대로 저장되지는 않는다. 컴퓨터과학에서 배열과 함께 가장 기본이 되는 대표적인 선형 자료구조 중 하나로, 다양한 추상 자료형 (Abstract Data Type, ADT) 구현의 기반이 된다.
연결 리스트는 배열과는 달리 특정 인덱스에 접근하기 위해서는 전체를 순서대로 읽어야 하므로 상수 시간에 접근할 수 없다. 즉, 탐색은 느리지만 시작 또는 끝 지점에 아이템을 추가하거나 삭제, 추출하는 작업은 빠르다.
13 팰린드롬 연결 리스트
Q. 연결 리스트가 팰린드롬 구조인지 판별하라.
풀이 1 리스트 변환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def isPalindrome(self, head: ListNode) -> bool:
q: List = []
if not head:
return True
node = head
# 리스트 변환
while node is not None:
q.append(node.val)
node = node.next
# 팰린드롬 판별
while len(q) > 1:
if q.pop(0) != q.pop():
reutrn False
return True
풀이 2 데크를 이용한 최적화
파이썬의 데크 (Deque)는 이중 연결 리스트 구조로 양쪽 방향 모두 추출하는 데 시간 복잡도 \(O(1)\) 에 실행된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def isPalindrome(self, head: ListNode) -> bool:
q: Deque = collections.deque()
if not head:
return True
node = head
while node is not None:
q.append(node.val)
node = node.next
# 팰린드롬 판별
while len(q) > 1:
if q.popleft() != q.pop():
reutrn False
return True
풀이 3 고 (Go)를 이용한 데크 구현
데크가 없고, 복잡함. 코딩 테스트에는 적합하지 않음.
풀이 4 런너를 이용한 우아한 풀이
This post is licensed under CC BY 4.0 by the author.