[LeetCode#21] Merge Two Sorted Lists

2024. 7. 24. 14:56·Algorithm/문제풀이

❒ Description


제목 Merge Two Sorted Lists
링크 https://leetcode.com/problems/merge-two-sorted-lists/description/
자료구조 선형 자료구조
푼 날짜 7/24

 

 

 

 

 

❒ Solution


1. Brute Force 

public static void main(String[] args) {

    // create Test Case
    ListNode node1_3 = new ListNode(4, null);
    ListNode node1_2 = new ListNode(2, node1_3);
    ListNode node1_1 = new ListNode(1, node1_2);

    ListNode node2_3 = new ListNode(4, null);
    ListNode node2_2 = new ListNode(3, node2_3);
    ListNode node2_1 = new ListNode(1, node2_2);

    // O(nlogn)
    List<ListNode> nodeList = new ArrayList<>();
    List<ListNode> mergedNodeList = addNodeRecursively(
            node2_1,
            addNodeRecursively(node1_1, nodeList)
    );
    mergedNodeList.sort(Comparator.comparing(nodes -> nodes.val));
    for (int i = 0; i < mergedNodeList.size() -1 ; i++) {
        mergedNodeList.get(i).next = mergedNodeList.get(i+1);
    }
    mergedNodeList.getLast().next = null;
    System.out.println(mergedNodeList.getFirst());
}

public static List<ListNode> addNodeRecursively(ListNode node, List<ListNode> nodeList) {
    ListNode defaultNode = node;
    if (defaultNode.next != null) {
        defaultNode = defaultNode.next;
        addNodeRecursively(defaultNode, nodeList);
    }
    nodeList.add(node);
    return nodeList;
}

 

내가 최초로 작성했던 코드이다.

  • 재귀 구조를 사용하여, 각 노드에 연결된 노드들을 리스트에 추가 
  • 리스트 정렬
  • 정렬된 리스트를 다시 연결 리스트로 변환

결과적으로 O((n+m)log(n+m))의 시간복잡도를 갖는다.

 


 

2. 재귀구조

public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    if (list1 == null) return list2;
    if (list2 == null) return list1;

    if (list1.val < list2.val) {
        list1.next = mergeTwoLists(list1.next, list2);
        return list1;
    } else {
        list2.next = mergeTwoLists(list1, list2.next);
        return list2;
    }
}

 

이 방식은 두 개의 정렬된 리스트를 한 번의 순회로 병합하는 방식이다. 

결과적으로 O(n+m)의 시간복잡도를 갖는다.

'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#24] Swap Nodes In Pairs  (0) 2024.07.28
[LeetCode#206] Reverse Linked List  (0) 2024.07.28
[LeetCode#234] Palindrome Linked List  (0) 2024.07.24
[LeetCode#121] Best Time to Buy and Sell Stock  (0) 2024.07.24
[LeetCode#238] Product of Array Except Self  (0) 2024.07.23
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#24] Swap Nodes In Pairs
  • [LeetCode#206] Reverse Linked List
  • [LeetCode#234] Palindrome Linked List
  • [LeetCode#121] Best Time to Buy and Sell Stock
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (167)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (1)
        • 이벤트 기반 마이크로서비스 구축 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    부분단조성
    Back-Tracking
    sliding-window
    binarysearch
    오블완
    greedy
    Two-Pointer
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[LeetCode#21] Merge Two Sorted Lists
상단으로

티스토리툴바