Merge Two Sorted Lists

2022. 1. 28. 17:07· 자료구조 알고리즘/코딩테스트

Merge Two Sorted Lists

 

Merge Two Sorted Lists - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

내가 한 것

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    
    ListNode *head;
    
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        
        // empty array
        if (!list1 && !list2 || list1 && !list2) {
            return list1;
        }
        else if (!list1 && list2) {
            return list2;
        } else { // if (list1 && list2) // not empty
            
            ListNode *node1 = list1;
            ListNode *node2 = list2; 
            int node1Idx = 0;
            int node2Idx = 0;
            
            while (node1 && node2) {
                // list1 기준으로 하자
                if (node1->val <= node2->val) {
                    // node2 의 값이 더 크거나 같다.
                    // 그 다음것과 비교
                    while (node1->val <= node2->val) {
                        node1 = node1->next;
                        node1Idx++;
                        if (!node1)
                            break;
                    }
                    // 만약 이제 작으면 앞쪽에 넣고
                    
                    list1 = addAtIndex(list1, node1Idx, node2->val);
                    node1Idx++;
                    node2Idx++;
                    node2 = node2->next;
                } else if (node1->val > node2->val) {
                    // node1 첫번째와 node2 첫번째를 비교해서 node2 더 작으면 node1 첫번째이전에 넣고,
                    
                    list1 = addAtIndex(list1, node1Idx, node2->val);
                    node1Idx++;
                    node2Idx++;
                    node2 = node2->next;
                }
            }
            
            
            if (node2) {
                while(node2) {
                    addAtIndex(list1, node1Idx, node2->val);
                    node2 = node2->next;
                    node1Idx++;
                }
            }
            
            return list1;
        } 
    }
    
    ListNode* addAtIndex(ListNode* headNode, int index, int val) {
        
        ListNode *node = headNode;
        ListNode *listNode = new ListNode();
        listNode->val = val;
        
        if (index == 0) {
            if (!node) 
                headNode = listNode;
            else {
                listNode->next = headNode;
                headNode = listNode;
            }
            
        } else {
            int i = 0;
            while(i < index - 1) {
                node = node->next;
                i++;
            }
            
            listNode->next = node->next;
            node->next = listNode;
            
        }
        
        head = headNode;
        return head;
    }
    
};

베스트

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
       if(!l1)
           return l2;
        
        if(!l2)
            return l1;
        
        if(l1->val<=l2->val){
            l1->next=mergeTwoLists(l1->next,l2);
            return l1;
        }
        
         l2->next=mergeTwoLists(l2->next,l1);
            return l2;
        
    }
};
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        if(list1 == NULL) return list2;
        if(list2 == NULL) return list1;
        
        ListNode dummy(INT_MIN);
        ListNode* result = &dummy;
        
        while(list1 != NULL && list2 != NULL){
            if(list1->val > list2->val){
                result->next = list2;
                list2=list2->next;
            }
            else{
                result->next = list1;
                list1=list1->next;
            }
            result=result->next;
            
        }
        
        if(list2 == NULL){
            while(list1 != NULL){
                result->next=list1;
                list1=list1->next;
                result=result->next;
            }
        }
        else if(list1 == NULL){
            while(list2 != NULL){
                result->next=list2;
                list2=list2->next;
                result=result->next;
            }
        }
        
        result->next = NULL;
        return dummy.next;
        
    }
};

 

느낀점

오랜만에 해서 그래도 몇시간동안 붙잡고 해냈다는 게 컸다.

재귀가 너무 약하다는 생각이 들었다.

leet code의 learn 부분에 recursion i, ii 있는데 learn부분에 있는 것은 다 풀어봐야겠다고 생각이 들었다.

조잡하게 풀어서 좀 아쉽긴 하다 ㅎ

728x90
반응형

'자료구조 알고리즘 > 코딩테스트' 카테고리의 다른 글

[다시예정] Flatten a Multilevel Doubly Linked List  (0) 2022.01.30
Add Two Numbers  (0) 2022.01.28
Odd Even Linked List  (0) 2021.07.07
Remove Linked List Elements  (0) 2021.07.06
Reverse Linked List  (0) 2021.07.04
'자료구조 알고리즘/코딩테스트' 카테고리의 다른 글
  • [다시예정] Flatten a Multilevel Doubly Linked List
  • Add Two Numbers
  • Odd Even Linked List
  • Remove Linked List Elements
내공얌냠
내공얌냠
내공냠냠
내공얌냠
내공냠냠
내공얌냠
전체
오늘
어제
  • 분류 전체보기 (255)
    • 개발 (113)
      • mediapipe (16)
      • insightface (5)
      • JongjuAR (3)
    • 자료구조 알고리즘 (79)
      • 코딩테스트 (64)
      • 이론 (15)
    • 공부 (54)
      • 단행본 (8)
      • 튜토리얼 (19)
      • 논문 (15)
      • 복기 (5)
    • 참여 (5)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 컴퓨터 비전 책 추천
  • 미디어파이프
  • mediapipe
  • 테디노트의 랭체인을 활용한 rag 비법노트 기본편 후기
  • flutter conference
  • 머신러닝이란
  • 컴퓨터 비전 기초
  • postgresql 재설치
  • flutter 행사
  • mediapipe translate
  • 깃 튜토리얼
  • git tutorial
  • vscode 스프링 설치
  • 테디노트의 랭체인을 활용한 rag 비법노트 기본편
  • speaker adaptation tts
  • 음성인식 기초
  • 플러터
  • flutter tutorial
  • 플러터 튜토리얼
  • google mediapipe
  • ios google places api
  • flutter 행사 후기
  • 음성인식 튜토리얼
  • 컴퓨터 비전
  • python telegrambot
  • 딥러닝 기반 음성인식 기초
  • 구글 미디어파이프
  • flutter
  • postgresql install in mac
  • 테디노트 rag 기본편

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
내공얌냠
Merge Two Sorted Lists
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.