๋ฌธ์ ์ ๋ชฉ | ์ ๋ต๋ฅ | ๋์ด๋ |
21. Merge-Two-Sorted-Lists | 62.6% | Easy |
Merge Two Sorted Lists - LeetCode
Can you solve this real interview question? Merge Two Sorted Lists - You are given the heads of two sorted linked lists list1 and list2. Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists
leetcode.com
๋ฌธ์ ์์ฝ
์ ๋ ฌ๋์ด ์๋ ๋ ๊ฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ํ๋์ ์ ๋ ฌ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๋ณํฉํ๋ผ
์กฐ๊ฑด 1) ๋ ๊ฐ์ ์ ๋ ฌ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค
์กฐ๊ฑด 2) ๊ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๊ธธ์ด๋ 0 ์ด์ 50 ์ดํ์ด๋ค
์กฐ๊ฑด 3) ํฉ์ณ์ง ํ๋์ ์ ๋ ฌ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํค๋๋ฅผ ๋ฐํํด์ผ ํ๋ค
์๊ฐํ๋ ํ์ด 1 : ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ํ์ด (59ms)
์๊ฐํ๋ ํ์ด 2 : ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ํ์ด(55ms)
ํ์ด 1
๋๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ํ์ด
Step1. ์์ธ์ฒ๋ฆฌ -> ๊ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ธธ์ด๊ฐ 0์ธ ๊ฒฝ์ฐ
Step2. ์ฒซ ๋ ธ๋์ ๊ฐ์ด ๋ ์์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณํฉ
๊ธฐ์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฒซ ๋ ธ๋๋ฅผ prev, ๋ ๋ฒ์งธ ๋ ธ๋๋ฅผ pointer1 ํฌ์ธํฐ๋ก ๋๋จธ์ง ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฒซ ๋ ธ๋๋ฅผ pointer2 ํฌ์ธํฐ๋ก ๊ฐ๋ฆฌํจ๋ค.
- pointer1.val>=pointer2.val ์ด๋ฉด prev์ pointer1 ์ฌ์ด์ pointer2๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ฅผ ์ฝ์
- ๊ทธ๋ ์ง ์๋ค๋ฉด pointer1์ ํ ์นธ ์ ์ง
Step3. ๋๋จธ์ง ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ค ํ๋จ๋์ง ์์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ๊ทธ๋๋ก ๊ธฐ์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ท๋ถ๋ถ์ ๋ณํฉ
Step 2 ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด์.
๋ค์๊ณผ ๊ฐ์ด ๊ธฐ์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ์, ๋๋จธ์ง ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ก์ ๋,
pointer1 ๊ฐ๊ณผ pointer2 ๊ฐ์ ๋น๊ตํด์
- pointer1 >= pointer2 ์ด๋ฉด
- pointer1 < pointer2 ์ด๋ฉด
๊ตฌํ
# 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, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
# Step 1
if list1==None:
return list2
if list2==None:
return list1
# Step 2
result=None
if list1.val<=list2.val:
result=list1
prev, pointer1=list1, list1.next
pointer2=list2
else:
result=list2
prev, pointer1=list2, list2.next
pointer2=list1
# ์ฒซ๋ฒ์งธ ๋ฆฌ์คํธ์ ๋ ์ซ์๊ฐ ๋ ํผ
while pointer1!=None and pointer2!=None:
if pointer1.val>=pointer2.val: #pointer1 ์์ ์ฐ๊ฒฐ
prev.next, pointer2=pointer2, pointer2.next
prev=prev.next
prev.next=pointer1
else:
prev, pointer1=prev.next, pointer1.next
# Step 3
if pointer2!=None:
prev.next=pointer2
return result
'์๊ณ ๋ฆฌ์ฆ๐ฅ > ๋ฌธ์ ํ์ด (Python)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 2. Add_Two_Numbers (Medium) 2023/5/5 (0) | 2023.05.05 |
---|---|
[LeetCode] 206. Reverse_Linked_List (Easy) 2023/5/5 (0) | 2023.05.05 |
[LeetCode] 234. Palindrome_Linked_list (Easy) 2023/5/4 (0) | 2023.05.04 |
[LeetCode] 121. Best_Time_to_Buy_and_Sell_Stock (Easy) 2023/5/3 (0) | 2023.05.03 |
[LeetCode] 238. product_of_array_except_self (Medium) 2023/5/2 (0) | 2023.05.02 |