• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

왜 newhead의 첫번째 val이 0이 되어야 하는지 모르겠습니다ㅠㅠㅠ

21.04.11 10:45 작성 조회수 76

1

그냥 더한 값을 바로 넣어주면 안되는 이유가 뭘까요?

답변 1

답변을 작성해보세요.

1

nee1202님 안녕하세요~~

질문 주셔서 감사합니다~

질문주신  내용:

왜 newhead의 첫번째 val이 0이 되어야 하는지 모르겠습니다

그냥 더한 값을 바로 넣어주면 안되는 이유가 뭘까요?

=>

이 문제의 최초 버젼은 ListNode 클래스 생성자가 int val 하나 뿐이었습니다

이럴 경우  대부분 dummy 데이타를 만들때 초기값을 0으로 만들면서 시작합니다.

하지만 질문주신데로 바로 더한값만 넣어주고 싶다고 하시면

(직관적이고 이해가 잘될거 같은 느낌)

아래 처럼 생성자를 추가하시면 됩니다.

 ListNode(int val) {

this.val = val;

}

 ListNode() {} => 이렇게 추가하면 val 을 안 만드셔도 됩니다.

이렇게 만들면 소스 아래 부분도 수정되어야합니다.

next부분을 잘 맞춰줘야합니다.

ListNode temp = new ListNode(carry%10);

p3.next = temp;

아래는 수정한 소스입니다.

next부분을 잘 비교해서 맞춰주시면됩니다.

감사합니다.

===수정한 소스============

class ListNode {

int val;

ListNode next;

ListNode(int x) {

this.val = x;

}

ListNode() {}

}

public class AddTwoNumbers {

public static void main(String[] args) {

ListNode l1 = new ListNode(2);

l1.next = new ListNode(4);

l1.next.next = new ListNode(3);

ListNode l2 = new ListNode(5);

l2.next = new ListNode(6);

l2.next.next = new ListNode(2);

ListNode node = solve(l1, l2);

while(node !=null) {

System.out.println(node.val);

node= node.next;

}

}

public static ListNode solve(ListNode l1, ListNode l2) {

//1

// ListNode newHead = new ListNode(0);

ListNode newHead = new ListNode();

ListNode p1=l1 , p2=l2, p3=newHead;

int carry =0;

//2

while( p1 != null|| p2!=null) {

if(p1 !=null) {

carry+= p1.val;

p1 = p1.next;

}

if(p2 !=null) {

carry+= p2.val;

p2 = p2.next;

}

// p3.next = new ListNode(carry%10);

// p3 = p3.next;

ListNode temp = new ListNode(carry%10);

p3.next = temp;

p3 = p3.next;

carry /=10;

}

if(carry==1) p3.next = new ListNode(1);

return newHead.next;

}

}

nee1202님의 프로필

nee1202

질문자

2021.06.18

친절한 답변 감사합니다!