반응형

 

여기서 요구하는것은 각자 세로로 더하고 뒤집기.

 

일단 더해보자.

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에 넣으려면 저렇게 해야한다.

 

728x90

'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

+ Recent posts