파이썬으로 배우는 알고리즘 책을 공부하며 풀었던 LeetCode문제들을 재정리해보자.
# 문제 설명
21번 Merge Two Sorted List 는 연결 리스트를 뒤집는 문제이다.
위 문제는 혼자 풀려고 해보았지만, 푸는 도중에 꼬이고 어떤식으로 풀어야할지 전혀 감이 잡히지 않아 책 풀이를 참고하였다.
이 문제는 책 풀이를 보아도 쉽게 이해가 되지 않아서 이해하는데 꽤 걸렸다.
# 풀이방법 1 - 재귀 구조로 연결 (책 풀이)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
if (not l1) or (l2 and l1.val > l2.val) :
l1, l2 = l2, l1
if l1:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
| 아이디어 |
l1과 l2를 비교해 작은 값을 왼쪽으로 오게하고, next는 다음 값으로 재귀호출한다.
| 핵심 |
if (not l1) or (l2 and l1.val > l2.val) :
l1, l2 = l2, l1
# 결과
'#️⃣ Project 및 개발일지 > Algorithm 문제 풀이' 카테고리의 다른 글
[LeetCode] 622. Design Circular Queue 원형 큐 디자인 (0) | 2022.02.26 |
---|---|
[LeetCode] 20. Valid Parentheses 유효한 괄호 (0) | 2022.02.23 |
[LeetCode] 92. Reverse Linked List II 역순 연결 리스트Ⅱ (0) | 2022.02.21 |
[LeetCode] 328. Odd Even Linked List 홀짝 연결 리스트 (0) | 2022.02.21 |
[LeetCode] 24. Swap Nodes in Pairs 페어의 노드 스왑 (0) | 2022.02.21 |