여기서 요구하는것은 각자 세로로 더하고 뒤집기.
일단 더해보자.
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode node = new ListNode(0);
}
}
우선 결과물을 보관할 ListNode를 선언한다. [0 -> null]
그리고 여기에 저장하고어쩌고하고 리턴하려고 하면 return node 할때는 node 전체를 보내는게아니라
node의 마지막에 포인터가 가있고, 마지막부분을 return 하기때문에 root를 따로 보관해준다.
만약 ListNode 의순서를 바꾼다거나, 파라미터로 받은 ListNode 를 변경할때에는 해당 ListNode 를 그대로 보내줘도되지만, 이렇게새로운 ListNode를 만들게 될 때는 root를 따로 보관해줘야 한다.
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode node = new ListNode(0);
ListNode root = node;
}
}
자 이제 l1, l2를 더하게 해보자.
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode node = new ListNode(0);
ListNode root = node;
int sum = 0;
while (l1 != null || l2 != null) {
if (l1 != null) {
sum += l1.val;
}
if (l2 != null) {
sum += l2.val;
}
}
}
}
우선 이렇게 sum 에 각각의 node를 더해준다.
그리고 10의 자릿수를 넘을수도있으니까 나머지만 node에 저장해두고 넘어가자.
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode node = new ListNode(0);
ListNode root = node;
int sum = 0;
while (l1 != null || l2 != null || sum >0) {
if (l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.val;
l2 = l2.next;
}
node.next = new ListNode(sum%10);
sum /= 10;
node = node.next;
}
return root.next;
}
}
sum 을 10으로 나눴을때 0이 남으므로 조건도 넣어주고
node.next 에 sum을 10으로 나눈 나머지만 저장한다.
그리고 sum은 10으로 나눈값을 저장해둔다. 그러면 올림처리가 된것처럼 사용할 수 있음.
마지막으로 node의 포인터를 움직여준다.
포인터를 움직여주는 이유는,
최초의 node : 0 -> null
node.next = new ListNode : 0 -> sum%10 -> null
이렇게 최초의 0과 null 사이에 낑기기 때문에, next를 해줘야 sum%10 값에 포인터가 위치하게 된다.
또한 new ListNode를 하는이유도, sum은 단순 int 이기때문에 node에 넣으려면 저렇게 해야한다.
'BackEnd > 알고리즘' 카테고리의 다른 글
leetcode 328. Odd Even Linked List (0) | 2024.08.03 |
---|---|
leetcode 24. Swap Nodes in Pairs (0) | 2024.08.01 |
leetcode 206. Reverse Linked List (0) | 2024.07.31 |
leetcode 21. Merge Two Sorted Lists (0) | 2024.07.31 |
leetcode 234. Palindrome Linked List (0) | 2024.07.27 |