반응형
[LeetCode] 21. Merge Two Sorted Lists
https://leetcode.com/problems/merge-two-sorted-lists/
문제접근
두 개의 정렬된 연결리스트를 하나의 정렬된 연결리스트로 합치는 문제이다.
연결리스트에서 가장 중요한 것은 첫번째 노드를 잃어버리면 안되는 것이다.(첫번째를 잃어버리면 다 잃어버린다.)
그래서 MergeList에 아무값이나 넣어서 초기화하고 next부터 첫번째 노드를 연결해 주었다.
temp를 이용해서 next를 연결해 주었고 list1과 list2 둘 중 하나가 null이 될 때까지 두개를 비교해서 더 작은 값을 가진 list를 temp를 이용해서 연결해 주었다.
그리고 마지막에 둘 중 하나가 null이 되면 while문을 빠져나와서 null이 아닌 list를 temp.next에 연결해주고
MergeList.next를 리턴하였다.(MergeList는 내가 초기한 임의의 노드이다.)
Code
/**
* 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) {
ListNode mergeList = new ListNode(-1); // 비어있는 Head
ListNode temp = mergeList;
while(list1 != null && list2 != null){
if(list1.val < list2.val){
// 둘 중 작은 값을 temp 다음 노드로 이어주고 다음 노드로 넘어간다.
temp.next = list1;
list1= list1.next;
} else {
temp.next = list2;
list2 = list2.next;
}
temp = temp.next;
}
// null이 아닌 list를 next로 넘겨준다. 둘 다 null이면 어떤 값이던 null
if(list1 == null)
temp.next = list2;
else temp.next = list1;
// mergeList는 그냥 시작용으로 만들어놓은 껍데기 이므로 next가 진짜 시작 노드이다.
return mergeList.next;
}
}
어려웠던 점/ 배운 점
연결 리스트를 직접 구현한게 너무 오랜만이라서 처음에는 어떻게 하는지 조금 헷갈렸다. 하지만 주석 처리된 ListNode class 의 메소드를 보고 방향을 잡고 풀었다.
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm/Java][프로그래머스] 문자열 내림차순으로 배치하기 (0) | 2022.01.17 |
---|---|
[Algorithm/Java][LeetCode] 20. Valid Parentheses (0) | 2022.01.16 |
[Algorithm/Java][BOJ] 1439번 뒤집기 (0) | 2022.01.16 |
[Algorithm/Java][프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2022.01.11 |
[Algorithm/Java][프로그래머스] [1차] 비밀지도 (0) | 2021.10.02 |