๋ชฉ์ฐจ
- Linked List
๋์ ์ฝ๋
# 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]:
# empty list
cNode = result = ListNode()
while list1 and list2:
if list1.val < list2.val:
cNode.next = list1
list1, cNode = list1.next, list1
else :
cNode.next = list2
list2, cNode = list2.next, list2
if list1 or list2:
cNode.next = list1 if list1 else list2
return result.next
์ฝ๋๋ฆฌ๋ทฐ
๋ ๊ฐ์ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํฉ์ณ์ ๋ ๋ค๋ฅธ ํ๋์ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ๊ตฌํํ๋ ๋ฌธ์ ์ด๋ค.
1) ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ตฌํ
๋จผ์ ํด๋น ๋ฌธ์ ์์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ListNode() ํด๋์ค๋ก ๋ ธ๋๋ฅผ ๊ตฌํํ์๊ณ
๊ฐ ๋ ธ๋๋ ๊ฐ์ ์๋ฏธํ๋ val ๊ณผ ๋ค์ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ next๋ฅผ ๋ด๊ณ ์๋ค.
2) ๋ ๋ฆฌ์คํธ ๋ณํฉ
โ ๋ ๋ฆฌ์คํธ์ ๋ณํฉ์ ๋ด์ ํ๋์ ๊ฒฐ๊ณผ๋ฆฌ์คํธ ์์ฑ(ํค๋ ์์ฑ)
cNode = result = ListNode()
๊ฒฐ๊ณผ๋ฆฌ์คํธ result์ ListNode()๋ฅผ ํธ์ถํ์ฌ ์ด๊ธฐํํ๊ณ (์ฒซ ๋ ธ๋),
๊ฒฐ๊ณผ ๋ฆฌ์คํธ ๋ด์ ํ์ฌ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ cNode์ ์ด๋ฅผ ํ ๋นํ์ฌ ์๋ก ๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋๋ก ํ์๋ค.
โก ๋ ๋ฆฌ์คํธ ๋ณํฉ์ ์ํ ๋ฐ๋ณต๋น๊ต ๊ณผ์
while list1 and list2:
if list1.val < list2.val:
cNode.next = list1
list1, cNode = list1.next, list1
else :
cNode.next = list2
list2, cNode = list2.next, list2
list1๊ณผ list2๊ฐ ๋ชจ๋ None์ด ์๋ ๊ฒฝ์ฐ ๋ฐ๋ณต์ ๊ณ์ ์งํํ๋ค.
๋งค ๋ฐ๋ณต ์ธ์ ๋ง๋ค ๋ ๋ฆฌ์คํธ์ ํ์ฌ ๋ ธ๋ ๊ฐ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ค.
๋ ์์ ๊ฒ์ cNode์ ๋ด๊ณ , ํด๋น ๋ ธ๋์ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ค.
โข ๋จ๋ ๋ฆฌ์คํธ ์ฒ๋ฆฌ
๋ ๋ฆฌ์คํธ ์ค ํ๋๊ฐ ๋ชจ๋ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ๋ด๊ธด ๊ฒฝ์ฐ ๋๋จธ์ง ๋ถ๋ถ์ ์ฒ๋ฆฌํด์ผํ๋ค.
if list1 or list2:
cNode.next = list1 if list1 else list2
์ผํญ ์ฐ์ฐ์๋ฅผ ํตํด None์ด ์๋ ๊ฒ์ cNode์ ๋ค์ ๋ ธ๋๋ก ํ ๋นํ๋ค.
โฃ ๊ฒฐ๊ณผ ๋ฐํ
ํ์ฌ ์ฒ์์ ์ ์ธํ result์๋ ๊ฒฐ๊ณผ๋ฆฌ์คํธ์ ํค๋๋ ธ๋๊ฐ ๋ด๊ฒจ์๋ค.
์ด๋ฅผ ๋ฐํํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
๋๊ธ