카테고리 없음

2. Add Two Numbers / LeetCode

건이두 2019. 12. 16. 16:02
728x90

이번 문제는 간단한 링크드리스트 문제라서, 자세한 설명은 생략하겠습니다.

  • 10이넘은 값을 carry라고 한다면,
  • carry되어서, 다음번 노드에 1을 전달하는 부분
  • carry가 전달 되어서, 10을 넘겼을 때, 0으로 바꾸고 새노드를 1로 지정하는 부분

이 3가지 부분이 코딩할 때, 주된 포인트 입니다.

    /**
    * Definition for singly-linked list.
    * public class ListNode {
    *     int val;
    *     ListNode next;
    *     ListNode(int x) { val = x; }
    * }
    */
    class Solution {
      public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
          ListNode a = l1, b = l2;
          ListNode r = null;
          ListNode c = null;
          int carry = 0;

          while(a != null || b != null) {
              int va = 0, vb = 0;
              if(a != null) {
                  va = a.val;
                  a = a.next;
              }
              if(b != null) {
                  vb = b.val;
                  b = b.next;
              }

              if(null == r) {
                  r = new ListNode((va+vb)%10);
                  c = r;
                  carry = (va+vb)/10;
              }
              else {
                  c.next = new ListNode((va+vb)%10);
                  c = c.next;
                  if(carry > 0) {
                      c.val++;
                      carry = 0;
                  }

                  carry = (va+vb)/10;

                  if(c.val == 10) {
                      carry = 1;
                      c.val = 0;
                  }
              }
    }

    if(carry > 0) {
        c.next = new ListNode(carry);
    }

    return r;
}
728x90