# 21. Merge Two Sorted Lists
https://leetcode.com/problems/merge-two-sorted-lists/
### 我的想法
```python
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
curr1 = l1
curr2 = l2
temp = ListNode()
while (curr1 and curr2) and(curr1.next and curr2.next):
if curr1.val >= curr2.val:
temp.next = curr1
curr1 = curr1.next
else:
temp.next = curr2
curr2 = curr2.next
return temp.next
```
思考的想法大概是 用一個新的ListNode,去串接答案
由curr1指向l1上的Node,curr2指向l2上的Node,
比較誰的值比較小;新的ListNode就接上(curr1,curr2)指到較小的那個Node
### 網友解法
```python
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
head = sort_list = ListNode(0)
while(l1 and l2):
if (l1.val < l2.val):
sort_list.next = l1
l1 = l1.next
sort_list = sort_list.next
elif (l1.val >= l2.val):
sort_list.next = l2
l2 = l2.next
sort_list = sort_list.next
sort_list.next = l1 or l2
return head.next
```
搞不懂為何sort_list在操作,最後是return head.next
在
```
head = sort_list = ListNode(0)
```
這行時,head , sort_list 被賦予同一個位子嗎?
所以sort_list後面做的事同時會接到head後面嗎? 目前只能這樣理解,但不曉得正確的觀念。
另外還有sort_list.next = l1 or l2這行
#### 亂想的過程
一開始的想法是有點混亂
第一個 if - elif 是在排除當其中是空的LinkedList時的狀況
第二個 if - elif 是看要從哪一串開始當Head
然後curr1:指向head後面的的node,curr2:指向另一條node
* 當curr1指到的這個node的下一個值,大於curr2指到的值時
* 代表現在curr1.next要指到curr2目前這個node
* 原本curr1後面的LinkedList 要讓curr2指標指過去
但這樣好想有點想得太複雜了
```python
# 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 l1 == None :
return l2
elif l2 == None:
return l1
if l1.val <=l2.val:
head = l1
curr1 = head
curr2 = l2
else :
head = l2
curr2 = l1
curr1 = head
while (curr1 and curr2) and(curr1.next and curr2.next):
if curr1.next.val > curr2.val:
#先例用一個暫時的Node把curr1.next後面那串接起來
temp = ListNode()
temp.next = curr1.next
curr1.next = curr2 #curr1.next接到curr2
curr1 = curr1.next #curr1往下移一格
curr2 = temp.next #curr2指到原本curr1.next那串
else:
curr1=curr1.next
return head
```