Daily LeetCode Challenge - 445. Add Two Numbers II

Min Young Kim·2023년 7월 17일
0

algorithm

목록 보기
192/198

Problem From.

https://leetcode.com/problems/add-two-numbers-ii/

오늘 문제는 두개의 리스트 노드가 주어졌을때, 각 노드를 하나의 수로 생각하고 그 두 수를 더했을때의 결과를 다시 리스트 노드로 반환하는 문제였다.

이 문제는 두개의 스택을 이용해서 풀 수 있었는데, 먼저 각각의 리스트 노드를 각각의 스택에 넣어둔 후, 각 스택을 돌면서 하나씩 숫자를 꺼내서 덧셈을 한뒤, 10을 넘어가면 올림을 해주는 방식으로 문제를 풀 수 있었다.

/**
 * 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 addTwoNumbers(l1: ListNode?, l2: ListNode?): ListNode? {
        if (l1 == null && l2 == null) return null
        if (l1 == null && l2 != null) return l2
        if (l1 != null && l2 == null) return l1
        
        var stack1: Stack<Int> = Stack()
        var stack2: Stack<Int> = Stack()

        var firstNode = l1
        var secondNode = l2
        
        var sum: Int = 0
        while (firstNode != null) {
            sum += firstNode.`val`
            stack1.push(firstNode.`val`)
            firstNode = firstNode.next
        }
        while (secondNode != null) {
            sum += secondNode.`val`
            stack2.push(secondNode.`val`)
            secondNode = secondNode.next
        }
        if (sum == 0) return ListNode(0)
        
        var answerTail: ListNode? = null
        var answerHead: ListNode? = null
        var up = 0
        
        while (stack1.isNotEmpty() || stack2.isNotEmpty()) {
            sum = up
            if (stack1.isNotEmpty()) sum += stack1.pop()
            if (stack2.isNotEmpty()) sum += stack2.pop()
            answerHead = ListNode(sum % 10).apply { next = answerTail }
            answerTail = answerHead
            up = sum / 10
        }
        if (up != 0) answerHead = ListNode(up).apply { next = answerTail }
        
        return answerHead
    }
}
profile
길을 찾는 개발자

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

많은 도움이 되었습니다, 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

글이 많은 도움이 되었습니다, 감사합니다.

답글 달기