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
}
}
많은 도움이 되었습니다, 감사합니다.