코딩테스트

[Swift 알고리즘] LeetCode - 2181. Merge Nodes in Between Zeros

유정주 2022. 7. 28. 10:40
반응형

Github

 

GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

문제 링크

 

Merge Nodes in Between Zeros - 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

 

풀이

이번 문제는 링크드 리스트 문제로 탐색과 삽입을 모두 물어보는 문제입니다.

0과 0 사이의 숫자를 합한 노드로 링크르 리스트를 생성해야 합니다.

 

노드의 값이 0이 아니라면 sum 변수에 노드의 val을 더합니다.

노드가 0이라면 결과 링크드 리스트에 sum 값으로 노드를 추가하고 sum을 0으로 설정합니다.

 

input 링크드 리스트의 next가 nil일 때까지 위 과정을 반복합니다.

 

전체 코드

더보기
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init() { self.val = 0; self.next = nil; }
 *     public init(_ val: Int) { self.val = val; self.next = nil; }
 *     public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
 * }
 */
class Solution {
    func mergeNodes(_ head: ListNode?) -> ListNode? {
        var result: ListNode? = nil
        var tail: ListNode? = nil
        var sum: Int = 0
        
        var inputCursor: ListNode? = head?.next
        while let cur = inputCursor {
            if cur.val == 0 {
                if result == nil {
                    result = ListNode(sum)
                    tail = result
                } else {
                    tail!.next = ListNode(sum)
                    tail = tail!.next
                }
                
                sum = 0
            } else {
                sum += cur.val
            } 
            
            inputCursor = cur.next
        }
        
        return result
    }
}

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형