[알고리즘] LeetCode - Add Two Numbers

Jerry·2021년 2월 24일
0

LeetCode

목록 보기
27/73
post-thumbnail

LeetCode - Add Two Numbers

문제 설명

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example 1:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.

Example 2:

Input: l1 = [0], l2 = [0]
Output: [0]

Example 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

Constrains

The number of nodes in each linked list is in the range [1, 100].
0 <= Node.val <= 9
It is guaranteed that the list represents a number that does not have leading zeros.

Solution

  • null reference를 주의하자.

class Solution {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        ListNode sumNode=new ListNode();
        ListNode head=null;

        int upper=0;
        int sum=0;
        while(l1!=null && l2!=null){
            //sumNode=new ListNode();
            if(head==null){
                head=sumNode;
            }else{
                sumNode.next=new ListNode();
                sumNode=sumNode.next;

                // 아래와 같이 사용하면, sumNode이 null 주소를 가리키게 되고, null 주소에 새로운 object를 할당시키는게 아니고
                // 새로 생성한(new ListNode())에 할당하게 되어 sumNode가 sumNode.next와 다른 주소를 가리키게됨. 기존 sumNode와 연결이 끊어진 새로운 object를 생성하게 되는 것.
                //  System.out.println("here head 2: " +System.identityHashCode(head)); 이용해서 메모리 주소 확인

                //  sumNode= sumNode.next
                // sumNode= new ListNode();
            }
            sum=l1.val+l2.val+upper;
            sumNode.val=sum%10;
            //System.out.println("here 1: " +sumNode.val);
            upper=sum /10; // 소수점 이하 절사
            l1=l1.next;
            l2=l2.next;
            
        }

        while(l1!=null){

            sumNode.next=new ListNode();
            sumNode=sumNode.next;
            
            sum=l1.val+upper;
            sumNode.val=sum%10;
            upper=sum /10; // 소수점 이하 절사
           
            l1=l1.next;
          
        }
        while(l2!=null){

            sumNode.next=new ListNode();
            sumNode=sumNode.next;

            sum=l2.val+upper;
            sumNode.val=sum%10;
            upper=sum /10; // 소수점 이하 절사
            l2=l2.next;
            
            //sumNode=new ListNode();
        }

        if(upper>0){
            sumNode.next=new ListNode();
            sumNode=sumNode.next;
            sumNode.val=upper;
        }
        return head;
    }
}
profile
제리하이웨이

0개의 댓글