728x90
반응형
리트코드 - 링크드인을 사용하여 add tow numbers 를 진행함
1st. Try. 먼가 코드가 엄청 지저분해지고 조건문 이것저것이다...
결국 하루 동안 고민하다가 답지를 보게 됨.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//sum listnode
ListNode sumNode = new ListNode(0);
ListNode totalNode = new ListNode(0);
int add=0;
int i=0;
while(l1 !=null || l2 !=null) {
int a,b =0;
int sum =0;
a = l1.val;
if(l2!=null)
b = l2.val;
sum = a+b;
if(add>0) {
sum+= add;
add =0;
}
if(sum >=10) {
sum = sum -10;
add +=1;
}
//해당 sumNode 에 대한 val 값을 입력
System.out.println(sum);
sumNode.val = sum;
System.out.println("sumNode"+sumNode.val);
if(i==0)
{
totalNode = sumNode;
}
if(l1.next!= null || l2.next!= null) {
ListNode nextNode = new ListNode(0);
sumNode.next = nextNode;
System.out.println("nextNode"+nextNode.val);
sumNode = sumNode.next;
}
i++;
l1 = l1.next;
if(l2!=null)
l2 = l2.next;
//System.out.println("totalNode"+totalNode.val);
}
return totalNode;
}
}
----참고하게 된 사이트 답지 내역
(3) Simple Solution - Add Two Numbers - LeetCode Discuss
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ret = new ListNode(0);
ListNode opr = new ListNode(0);
opr = ret;
int sum = 0;
while(l1 != null || l2 != null || sum != 0){
if(l1 != null){
sum = sum + l1.val;
l1 = l1.next;
}
if(l2 != null){
sum = sum + l2.val;
l2 = l2.next;
}
opr.next = new ListNode(sum%10);
sum = sum/10;
opr = opr.next;
}
return ret.next;
}
ToDO : [ 다시 한번 위 답안 고쳐서 풀기]///
- ADD 변수를 굳이 추가하지 않고/ 이제 마지막을 SUM 에 대한 변수로 통일화
- 그리고 IF 문 최대한 적게 쓰기
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//sum listnode
ListNode sumNode = new ListNode(0);
ListNode totalNode = new ListNode(0);
//마지막에 이제 한 노드를 빼기가 어려우니 처음 노드를 빼는 것처럼 한다. .
totalNode = sumNode;
int add=0;
int sum = 0;
int i=0;
while(l1 !=null || l2 !=null || sum!=0 ) {
int a =0;
int b =0;
if(l1!=null){
a = l1.val;
l1 = l1.next;
}
if(l2!=null) {
b = l2.val;
l2=l2.next;
}
sum += a+b;
///이 ADD 변수를 빼야 됬었다...
// if(add>0) {
// sum+= add;
// add =0;
// }
// if(sum >=10) {
// sum = sum -10;
// add +=1;
// }
//해당 sumNode 에 대한 val 값을 입력 ---바로 입력하는 것이 아니라 nextNode 에 대한 값을 입력
sumNode.next = new ListNode(sum%10);
sum=sum/10;
sumNode = sumNode.next;
i++;
//System.out.println("totalNode"+totalNode.val);
}
return totalNode.next;
}
}
-----add 변수 추가해서 다시 풀이
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//sum listnode
ListNode sumNode = new ListNode(0);
ListNode totalNode = new ListNode(0);
//마지막에 이제 한 노드를 빼기가 어려우니 처음 노드를 빼는 것처럼 한다. .
totalNode = sumNode;
int add=0;
int sum = 0;
int i=0;
while(l1 !=null || l2 !=null ) {
sum =add;
if(l1!=null){
sum+= l1.val;
l1 = l1.next;
}
if(l2!=null) {
sum+= l2.val;
l2=l2.next;
}
if(add>0) {
add =0;
}
if(sum >=10) {
sum = sum -10;
add +=1;
}
//해당 sumNode 에 대한 val 값을 입력 ---바로 입력하는 것이 아니라 nextNode 에 대한 값을 입력
sumNode.next = new ListNode(sum);
sumNode = sumNode.next;
//System.out.println("totalNode"+totalNode.val);
}
if(add ==1){
sumNode.next = new ListNode(1);
}
return totalNode.next;
}
}
728x90
반응형
'이유's STUDY > 알고리즘 문제풀이' 카테고리의 다른 글
Greedy algorith - 코딩테스트 [탐욕법] : 조이스틱 (0) | 2024.11.11 |
---|---|
[ leetcode ] dfs 문제 - number of islands (0) | 2021.11.02 |
[ 자료구조 ] LinkedList (0) | 2021.08.26 |
[ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ (0) | 2021.08.11 |
[ 백준 ] 1560번 - N과 m (2) --- java 이용 (0) | 2021.08.06 |