Add Two numbers
생각할 포인트
- 링크드리스트이기 때문에 처음부터 총 몇개인지를 알 수 없어 while문을 써야겠다는 생각을 했다
- 두 노드를 더한 값이 있는 새 노드를 만들돼, 더한 값이 10이 넘는다면 기억해뒀다가 다음값에 추가한다
- 두 리스트의 길이가 다르기 때문에 끊긴 쪽은 null값 처리한다
- while문을 탈출할 조건을 생각한다(두 리스트가 모두 null일 때 탈출)
접근방식
- 제출용 변수와 실제로 움직일 변수를 선언한다
- 새 노드를 생성한 후 더한 값을 넣고, 자릿수가 넘어가는 값은 따로 저장한다
- 새 노드를 생성하고, 전 노드의 next에 넣은 후 더한 값을 넣는다
- 자릿수가 넘어갔으니 따로 저장한다
- 넘어간 자릿수를 추가로 더한다
오답노트
- 마지막에 자릿수가 1이 남으면 추가로 노드를 하나 더 생성해서 붙여야했다
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int expandedNum = 0;
ListNode listNodeA = l1;
ListNode listNodeB = l2;
ListNode node = new ListNode();
ListNode answer = node;
while(true){
int l1Val = listNodeA != null ? listNodeA.val : 0;
int l2Val = listNodeB != null ? listNodeB.val : 0;
int totalNum = l1Val + l2Val + expandedNum;
if(totalNum>=10){
expandedNum = 1;
totalNum -= 10;
}else expandedNum = 0;
node.val = totalNum;
if(listNodeA != null && listNodeA.next != null) listNodeA = listNodeA.next;
else listNodeA = null;
if(listNodeB != null && listNodeB.next != null) listNodeB = listNodeB.next;
else listNodeB = null;
if(listNodeA==null && listNodeB==null) break;
else{
node.next = new ListNode();
node = node.next;
}
}
if(expandedNum==1) node.next = new ListNode(1);
return answer;
}
}
Best Solution과의 비교
- 속도와 저장공간은 비슷했다
- while 바로 옆 조건절에 두 노드 모두 끝이면 탈출하는 구문과, 오답노트에 있던 자릿수가 남아있을 경우에 대한 구문을 추가해서 간소화시켰다
This post is licensed under CC BY 4.0 by the author.


