2. Add Two Numbers

JJ·2021년 1월 24일
0

Algorithms

목록 보기
78/114
/**
 * 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) {
        Stack<String> s = new Stack<String>(); 
        ListNode one = l1;
        ListNode two = l2; 
        ListNode result; 
        
        while (one.next != null && two.next != null) {
            s.add(one.val + two.val);
            one = one.next;
            two = two.next;
        }
        
        if (one.next != null) {
            s.add(one.val);
            one = one.next;
        } else if (two.next != null) {
            s.add(two.val);
            two = two.next;
        }
        
        boolean isOver; 
        for (int i = 0; i < s.size(); i++) { //should start at 1? 
            int value = s.pop();
            if (value >= 10) {
                isOver = true; 
                value = value % 10;
            } else {
                isOver = false;
            }
            
            if (isOver) {
                value++;
            }
            result.next = ListNode(value);   
        }
        
        return result;
    }
}

오랫동안 한 삽질...그리고 포기

/**
 * 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 dummyHead = new ListNode(0);
    ListNode p = l1, q = l2, curr = dummyHead;
    int carry = 0;
    while (p != null || q != null) {
        int x = (p != null) ? p.val : 0;
        int y = (q != null) ? q.val : 0;
        int sum = carry + x + y;
        carry = sum / 10;
        curr.next = new ListNode(sum % 10);
        curr = curr.next;
        if (p != null) p = p.next;
        if (q != null) q = q.next;
    }
    if (carry > 0) {
        curr.next = new ListNode(carry);
    }
    return dummyHead.next;
}
}

Runtime: 2 ms, faster than 76.98% of Java online submissions for Add Two Numbers.
Memory Usage: 39 MB, less than 90.09% of Java online submissions for Add Two Numbers.
Next challenges:
풀 수 있을것 같은데 시간 관계상 루샨이 델꼬왔읍니다^^

0개의 댓글