sean.jin
Spark Code Blog
sean.jin
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발공부
      • Kotlin
      • LeetCode
      • Algorithm
      • React
    • 주식차트
    • 책리뷰
    • 유틸리티

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 변동성
  • 책리뷰
  • 주식책리뷰
  • 오
  • 아빠와 딸의 주식투자 레슨
  • 네마녀의날
  • 쿼드러플위칭데이
  • 초보
  • 책
  • 부의 추월차선
  • 트리플 위칭데이
  • 주식투자
  • 자기개발
  • 책추천
  • 경제
  • 주식입문자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sean.jin
개발공부/Algorithm

[알고리즘] LinkedList 링크리스트: 활용 예제 - 뒤집기, 합치기, 가운데 값 찾기 - Kotlin

[알고리즘] LinkedList 링크리스트: 활용 예제 - 뒤집기, 합치기, 가운데 값 찾기 - Kotlin
개발공부/Algorithm

[알고리즘] LinkedList 링크리스트: 활용 예제 - 뒤집기, 합치기, 가운데 값 찾기 - Kotlin

2021. 9. 7. 16:14
반응형

목차

     

    저번 포스트에서는 LinkedList에 개념과 구현 방법을 다뤄봤는데요,

     

    [Algorithm] Kotlin LinkedList 개념 - node 추가하기, 제거하기

    목차 LinkedList 개념 LinkedList는 각 Node들이 다음 Node에 연결돼있는 리스트입니다. LinkedList에는 두 가지가 있습니다. 1. Singly Linked List: 다음 node에 한 방향으로 연결된 리스트입니다. 2. Doub..

    underdog11.tistory.com

    이 포스트에서는 LinkedList로 가장 자주 활용되는 3가지 타입에 문제를 다뤄보겠습니다. 

     

     

    LinkedList 뒤집기

    아래 그림과 같이 LeetCode에 예제를 통해 LinkedList를 뒤집어 보겠습니다.

     

    해설 - Reverse LinkedList(LeetCode)

     

    fun reverseList(head: ListNode?): ListNode? {
    
    	1. 
        var headNode = head
    
    	while (head?.next != null) {
        2.
    		val a = head
    		val b = head.next
    		val c = head.next?.next
    	3.
    		b?.next = headNode // 2 -> 1
    	4.
        	a.next = c //       1 -> 3
    
    	5.
    		headNode = b
    	}
    ,
    	return headNode
    }

     

    1. 가장 앞에 있는 Node인 1을 headNode로 지정하게 됩니다. 그리고 아래 반복문을 head의 다음이 null이 아닐 때까지 반복합니다. 

     

    2. 1->2->3은 a->b->c를 가리킵니다.

     

    3. 현재 headNode는 a입니다. b.next는 headNode를 가리키게 합니다. 1 <-2.

     

    4. a.next = c 이 코드는 head의 다음 값을 c로 나타냅니다. 1 -> 3.

     

    4번까지 완료되면 아래와 같이 바뀝니다.

     

     

    그리고 전체적으로 보면 이렇게 LinkedList가 변경됩니다. 

     

     

    5.  b가를 headNode로 지정하게 되고. 3이 headNode가 되고 while문을 충족하기 때문에 다시 반복됩니다. 

     

     

    LinkedList 가운데 위치 값 찾기

    fast와 slow를 이용하여 가운데 값을 찾아보겠습니다. 원리는 이렇습니다. LinkedList head부터 fast가 2번 움직일 때마다 slow는 한번 움직입니다. 그리고 fast가 null에 도달했을 때 slow 값을 리턴합니다. 

     

    해설 - Find middle form LinkedList(LeetCode)

     

    fun findMiddle(head: ListNode?): ListNode? {
    
    	var slow = head
        var fast = head 
        
        while(fast != null){
        	fast = fast.next
            if(fast != null){
            	fast = fast.next
                slow? = slow?.next
                
            }
        }
        return slow
    }

     

    2개의 LinkedList 합치기

     

    아래 그림과 같이 2개의 LinkedList를 합치는데 오름차순으로 배열해서 합치도록 하겠습니다.

     

    해설 - Merge Two Sorted Lists

     

    /**
     * Example:
     * var li = ListNode(5)
     * var v = li.`val`
     * Definition for singly-linked list.
     * class ListNode(var `val`: Int) {
     *     var next: ListNode? = null
     * }
     */
    
    class Solution {
        fun mergeTwoLists(left: ListNode?, right: ListNode?): ListNode? {
            if (left == null) return right
            if (right == null) return left
    
            val (small, large) =
                if (left.`val` < right.`val`)
                    left to right
                else
                    right to left
    
            small.next = mergeTwoLists(small.next, large)
            return small
        }
    }

     

     

     

    참고

     

     

    Explore - LeetCode

    LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore.

    leetcode.com

     

     

    Explore - LeetCode

    LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore.

    leetcode.com

     

     

    Announcing Data Structures & Algorithms in Kotlin, Second Edition!

    Whether you want to make your code more efficient, or prepare for a job interview at a big tech company, our newly-updated book is here to help you.

    www.raywenderlich.com

     

    반응형

    '개발공부 > Algorithm' 카테고리의 다른 글

    [알고리즘] Tree 트리 : 기본정리 - 트리 구성, 깊이우선순회(Depth-First Traversal), 레벨순회(LevelOrderTraversal), 검색(Search) - Kotlin  (0) 2021.09.24
    [알고리즘] Queue 큐: 기본정리 - DoublyLinkedList(이중연결 리스트), Ring Buffer(원형큐),ArrayList, Stack으로 Queue 구현하기 - Kotlin  (0) 2021.09.16
    [알고리즘] Stack 스택: 기본정리 - pop, push, peek, count - Kotlin  (0) 2021.09.09
    [알고리즘] 기본으로 알아야할 Kotlin Collection Interface 종류 및 구현 - Iterable, Collection, MutableIterable, MutableCollection 사용예제  (0) 2021.08.19
    [Algorithm] Kotlin LinkedList 개념 및 구현 - 지정한 위치에 node 추가하기, node 제거하기  (0) 2021.07.28
    • LinkedList 뒤집기
    • LinkedList 가운데 위치 값 찾기
    • 2개의 LinkedList 합치기
    • 참고
    '개발공부/Algorithm' 카테고리의 다른 글
    • [알고리즘] Queue 큐: 기본정리 - DoublyLinkedList(이중연결 리스트), Ring Buffer(원형큐),ArrayList, Stack으로 Queue 구현하기 - Kotlin
    • [알고리즘] Stack 스택: 기본정리 - pop, push, peek, count - Kotlin
    • [알고리즘] 기본으로 알아야할 Kotlin Collection Interface 종류 및 구현 - Iterable, Collection, MutableIterable, MutableCollection 사용예제
    • [Algorithm] Kotlin LinkedList 개념 및 구현 - 지정한 위치에 node 추가하기, node 제거하기
    sean.jin
    sean.jin
    앱개발, 알고리즘, JS, Kotlin, 미국 취업준비

    티스토리툴바

    단축키

    내 블로그

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

    블로그 게시글

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

    모든 영역

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

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