HooneyLog
© 2026 Seunghoon Shin. All rights reserved.
모든 게시글
알고리즘
2022. 5. 12.•
1

LeetCode에서 Merge Two Sorted Lists 풀어보기

Seunghoon Shin
작성자 Seunghoon Shin풀스택 개발자

문제 링크

bookmark

이번 문제는 list1과 list2라는 두가지의 단일 연결 리스트를 오름차순 형태로 합치는 Merge Two Sorted Lists 의 문제이다.

연결 리스트

  • 각 노드들을 포인터로 연결한 자료구조
  • 탐색은 O(n)이 소요되며, 추가와 제거는 O(1)이 소요됨
  • 때문에 추가와 삭제가 반복되는 로직이라면 배열말고 연결리스트가 유리함
  • 단일 연결리스트, 이중 연결리스트, 선형 연결리스트 형태가 존재함

소스코드

function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null { let newNodeList = new ListNode(0); const result = newNodeList; while(list1 !== null && list2 !== null) { if(list1.val < list2.val) { newNodeList.next = list1; list1 = list1.next; } else { newNodeList.next = list2; list2 = list2.next; } newNodeList = newNodeList.next; } if(list1 !== null) newNodeList.next = list1; if(list2 !== null) newNodeList.next = list2; return result.next };
  1. 제공된 연결리스트 생성자로 하나의 연결리스틀 만들어준다.
  2. return 할 result의 변수에 참조를 해준다
  3. list1의 노드값과 list2의 노드값을 계속 비교해줄 while문을 만들어준다
  4. list1의 노드값이 더 작으면 list1을 새로 만들어준 연결 리스트인 newNodeList에 next를 사용하여 포인터로 연결해준다.
  5. 그 반대인 경우는 list2를 넣어준다
  6. newNodeList 의 꼬리 부분을 갱신해준다
  7. list1과 list2에서 둘중 하나라도 null 값이 나오면 반복문을 종료한다
  8. 만약 남아 있는 연결리스트에서 null 값이 아닌 리스트가 있다면 그 리스트의 나머지 노드를 포인터로 연결해준다.
  9. result.next를 사용하여 연결된 노드들을 return 해준다
← 이전 글LeetCode의 올바른 괄호문제 풀어보기
다음 글 →Leetcode에서 Search Insert Position 풀어보기