ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [linked list] merge two sorted lists
    Algorithm/LeetCode 2025. 2. 22. 14:44

     Problem

    https://leetcode.com/problems/merge-two-sorted-lists/description/

     

     Approach & Solution

    방식1) while문 사용

    더보기
    • 정답 연결리스트에 대한 head, tail 역할 포인터 생성
    • 첫 노드 연결에 대한 null 처리를 하지 않도록 하기 위해 dummyNode 생성함
    /**
     * 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 dummy = new ListNode(); // head 포인터 역할
            ListNode cur = dummy; // tail 포인터 역할
    
            while (list1 != null && list2 != null) {
                if (list1.val > list2.val) { // list2.val 추가, list2 포인터 이동
                    cur.next = list2;
                    list2 = list2.next;
                } else { // list1.val 추가, list1 포인터 이동
                    cur.next = list1;
                    list1 = list1.next;
                }
    
                cur = cur.next;
            }
    
            // list1 or list2 중 남은 원소 처리
            cur.next = (list1 != null) ? list1 : list2;
    
            return dummy.next;
        }
    }

     

    방식2) 재귀 사용

    더보기
    /**
     * 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;
            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;
            }
        }
    }

    'Algorithm > LeetCode' 카테고리의 다른 글

    [string] valid palindrome  (0) 2025.03.08
    [array] merge sorted array  (0) 2025.02.22
    [linked list] palindrome linked list  (0) 2025.02.16
    [array] maximum subarray  (0) 2025.02.15
    [array] best time to buy and sell stock  (0) 2025.02.15

    댓글

Designed by Tistory.