Merge Two Sorted Lists - LeetCode
두 리스트 list1, list2의 head를 받는다.
두 리스트를 하나의 정렬된 리스트로 병합해야한다.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// 둘 중 하나의 리스트가 빈 리스트인 경우
if(list1 == null) return list2;
else if ( list2 == null)return list1;
ListNode res = new ListNode(0);
// 결과를 리턴해야하기 때문에, 첫번째 노드를 기억하고 있어야함.
// 따라서 덧붙이는 노드들은 모두, first.next 부터 시작해서 연결되는 것들
ListNode first = res;
// 두 리스트 안의 노드의 수는 0이상 50 이하다
// res 가 아니라 res.next 에다가 위치시켜야 한다.
while(list1!=null){
while(list2 != null){
// list1.val <= list2.val 이면 break -> one의 값을 res에 추가
if(list1.val <= list2.val) break;
// Otherwise , two의 값을 res에 추가
res.next = new ListNode(list2.val);
res = res.next;
list2 = list2.next;
}
res.next = new ListNode(list1.val);
res = res.next;
list1 = list1.next;
}
// 끝나고 남은 것을 붙여준다
if(list1 != null){
res.next = list1;
}else if(list2 != null){
res.next = list2;
}
return first.next;
}
}
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
# 둘 중 하나의 리스트가 비어있는 경우 -> 다른 리스트를 반환
if list1 == None:
return list2
if list2 == None:
return list1
# 순차적으로 비교해 나간다
first = res = ListNode()
while list1 != None:
while list2 != None:
# 현재 list1 요소 <= list2 요소 ===> list1 요소를 res에 붙인다.
# Otherwise ===> list2 요소를 res에 붙인다
if list1.val <= list2.val:
break
res.next =ListNode(list2.val)
res = res.next
list2 = list2.next
res.next = ListNode(list1.val)
res = res.next
list1 = list1.next
# 두 리스트 중 남아있는 부분을 res에 덧붙인다.
if list1 != None:
res.next = list1
if list2 != None:
res.next = list2
return first.next
위의 방식을 그대로 유지하고
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
# 둘 중 하나의 리스트가 비어있는 경우 -> 다른 리스트를 반환
if list1 == None:
return list2
if list2 == None:
return list1
# 순차적으로 비교해 나간다
first = res = ListNode()
while list1 and list2:
if list1.val <= list2.val:
res.next = ListNode(list1.val)
list1 = list1.next
else:
res.next = ListNode(list2.val)
list2 = list2.next
res = res.next
# 나머지 경우를 덧붙이기 위함
res.next = list1 or list2
return first.next
여기서 이런식으로 하는 부분들이 상당히 생소하다..
while list1 and list2:
res.next = list1 or list2