알고리즘 문제 풀기

<leet code> Add Two Numbers ,etc/ c++ malloc vs new

studying develop 2020. 3. 12. 21:32

그냥 리스트 두개를 더하면 되는거 같은데 왜인지 모르겠는데 런타임 에러 난다 .ㅠㅠ

 

말록을 잘못 사용하는거 같다.

 

class Solution {
public:
	ListNode * addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode *ans = (ListNode*)malloc(sizeof(ListNode));
		ListNode *cur = ans;
		while (l1->next != NULL || l2->next != NULL) {
			int sum = l1->val + l2->val;
			int up = 0;

			if (sum <10) {
				cur->val = sum;
				up = 0;
			}
			else {
				cur->val = sum - 10;
				up = 1;
			}

			cur->next = (ListNode*)malloc(sizeof(ListNode));
			cur = cur->next;
			if (l1->next != NULL)
				l1 = l1->next;
			if (l2->next != NULL)
				l2 = l2->next;
		}
		return ans;
	}
};

 

 


malloc vs new

 

[https://hwan-shell.tistory.com/12

보고 내가 잘 몰랐던 부분은 new도 반환 값이 주소값이라는 사실이다....ㅎㅎ

 

 A *p = new A();

 

new로 위 코드를 바꾸니까 된다, new로 하면 자동으로 초기화도 되나 보다.

 

class Solution {
public:
	ListNode * addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode* ans = new ListNode();
		ListNode *cur = ans;
        int up = 0;
		while (l1 != NULL || l2 != NULL) {
			int sum = l1->val + l2->val;

            //cout << sum<<"\n";

			if (sum <10) {
				cur->val = sum + up;
				up = 0;
			}
			else {
				cur->val = sum + up - 10;
				up = 1;
			}
        
            if(l2->next == NULL && l1->next == NULL){
                if(up == 1){
                    cur->next = new ListNode(1);
                }
                break;
            }
            
			cur->next = new ListNode();
			cur = cur->next;
            
			if (l1->next != NULL)
				l1 = l1->next;
            else{
                l1->val =0;
            }
            
			if (l2->next != NULL)
				l2 = l2->next;
            else
                l2->val = 0;
            

		}

		return ans;
	}
};

 

틀렸다. 리스트를 잘 다루지 못했다.....

 

반례

Input
[1]
[9,9]
Output
[0,10]
Expected
[0,0,1]