6주차. 연결리스트 복습(두 정렬

https://memodayoungee.39

5주. 연결된 목록(두 개의 정렬된 목록 병합)

14. 두 개의 정렬된 목록 병합 https://leetcode.com/problems/merge-two-sorted-lists/ 두 개의 정렬된 목록 병합 – LeetCode 두 개의 정렬된 목록 병합 – 두 개의 정렬된 연결 목록 list1 및 list2의 헤드를 얻습니다. 두 목록을 하나의 정렬된 목록으로 병합

메모다영이.tistory.com

검토된 문제입니다.

시간은 12일 팀 전원 “연결된 목록” 백준 문제라는 난관에 부딪혀 번갈아가며 풀렸지만 아무도 연결 리스트 문제를 이야기할 수 없었다.

아무것도 모르고 답만 보면 문제를 낭비하게 되니까 문제를 확인해야 한다는 의견이 있었고, 6주차에서는 백준의 2번 문제와 풀었던 연결 리스트의 문제를 풀기로 했다. . 그리고 하나하나 핸드코딩으로 디버깅을 해본 결과 큰 깨달음을 얻었습니다…

※ 나는 재귀 함수에 약하다

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if(list1!=null && list2!=null)
        {
            if(list1.val < list2.val)
            {
                list1.next =  mergeTwoLists(list1.next,list2);
                return list1;
            }
            else
            {
                list2.next = mergeTwoLists(list1,list2.next);
                return list2;
            }
        }
        if(list1 == null)
            return list2;
        return list1;
    }


제가 설명을 잘 못하는 한국인이지만 최대한 쉽게 설명하도록 노력하겠습니다.

list1.next =  mergeTwoLists(list1.next,list2);
list2.next = mergeTwoLists(list1,list2.next);

next에 더 작은 값을 전달하고 next에 반환하는 이유: 가장 작은 숫자를 뺀 나머지 값을 모두 인수 값으로 전달하고 반환된 값을 다음으로 가장 작은 값으로 연결하는 것이 쉽다고 생각했습니다. (조건문을 보면 가장 작은 숫자를 기준으로 이전에 연결된 다음 노드를 통과합니다.)

나머지 팰린드롬 연결 리스트와 역연결 리스트는 대학에서 설명했으니 통과