리트코드 - #2 Add Two Numbers (Medium)
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode();
ArrayList<Integer> n1 = createInt(l1);
ArrayList<Integer> n2 = createInt(l2);
ArrayList<Integer> vList = new ArrayList<>();
int up = 0;
for (int i = 0; i < Math.max(n1.size(), n2.size()); i++) {
int v1 = i >= n1.size() ? 0 : n1.get(i);
int v2 = i >= n2.size() ? 0 : n2.get(i);
int v = up + v1 + v2;
vList.add(v % 10);
if (v >= 10) up = 1; else up = 0;
}
if (up == 1) vList.add(1);
for (int i = vList.size()-1; i >= 0; i--) {
if (i == vList.size()-1) {
result = new ListNode(vList.get(i));
} else {
result = new ListNode(vList.get(i), result);
}
}
return result;
}
public ArrayList<Integer> createInt(ListNode n) {
ArrayList<Integer> result = new ArrayList<>();
while (n != null) {
int v = n.val;
result.add(v);
n = n.next;
}
return result;
}
}
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode();
int up = 0;
ListNode temp = result;
while (l1 != null || l2 != null) {
int num = up;
if (l1 != null) {
num += l1.val;
l1 = l1.next;
}
if (l2 != null) {
num += l2.val;
l2 = l2.next;
}
up = num >= 10 ? 1 : 0;
temp.val = num % 10;
if (up == 0 && l1 == null && l2 == null) continue;
temp.next = new ListNode(up);
temp = temp.next;
}
return result;
}
}
ListNode 라는 것을 처음 접하는데 단순 연결 리스트 구현할 때 정말 좋을 것 같음
작성코드1과 작성코드2를 보면 코드2가 훨씬 코드가 짧고 간결하지만 런타임이나 메모리 면에서는 코드1이 더 좋은 것을 볼 수 있었고, 짧고 간결하다고 좋은 것은 아니라는 것을 다시 한번 느낌