[Leet code] Add Two Numbers (java)
1785 ワード
質問する
コード#コード# /**
* 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) {
ListNode node = new ListNode(0);
ListNode result = node;
int sum = 0;
while (l1 != null || l2 != null || sum > 0) {
if (l1 != null)
{
sum += l1.val;
l1 = l1.next;
}
if (l2 != null)
{
sum += l2.val;
l2 = l2.next;
}
node.next = new ListNode(sum % 10); // 1의자리
sum /= 10; // 10의 자리
node = node.next; // 1의자리 가지고 다음 노드는 10의자리 연산에사용됨
}
return result.next; // 시작점은 바꼈으니까!
}
}
解説
2つの異なるリンクリストがあり、各リストノードに含まれる0~9の数値を加算すると、値のあるリストの問題が返されます.コアは、各ノードの数が増加し、シフトが発生した場合、その値を次のノードの演算に適用することである.
したがって、計算結果を格納するために変数(sum)とリスト(node)が必要であり、最初のノードを指すリスト(result)が答えを返すために必要であり、合計3つの宣言が必要である.
繰り返し文でノードを迂回し、値を追加して新しいリストのノードを接続します.この場合、終了条件をよく考慮すると
l 1を見終わるには、l 2を見終わるには、両方が空であっても、前の演算の位置が上昇していれば反映されます.この3つの条件を満たさなければならない.
繰り返し文の条件を満たすと,残りは残りの演算とシェア演算で簡単に解決される.sumにl 1,l 2の値を加算し,残りのノードの新しいノードを得る.nextで作成し、sumはシェア演算値を保存し、node=nodeにします.次の繰り返し文で新しいノードをスムーズに生成するにはnextに移動します.
注意:https://bcp0109.tistory.com/entry/Add-Two-Numbers-Java
Reference
この問題について([Leet code] Add Two Numbers (java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@sebaek42/Leet-code-Add-Two-Numbers-java
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
/**
* 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) {
ListNode node = new ListNode(0);
ListNode result = node;
int sum = 0;
while (l1 != null || l2 != null || sum > 0) {
if (l1 != null)
{
sum += l1.val;
l1 = l1.next;
}
if (l2 != null)
{
sum += l2.val;
l2 = l2.next;
}
node.next = new ListNode(sum % 10); // 1의자리
sum /= 10; // 10의 자리
node = node.next; // 1의자리 가지고 다음 노드는 10의자리 연산에사용됨
}
return result.next; // 시작점은 바꼈으니까!
}
}
解説
2つの異なるリンクリストがあり、各リストノードに含まれる0~9の数値を加算すると、値のあるリストの問題が返されます.コアは、各ノードの数が増加し、シフトが発生した場合、その値を次のノードの演算に適用することである.
したがって、計算結果を格納するために変数(sum)とリスト(node)が必要であり、最初のノードを指すリスト(result)が答えを返すために必要であり、合計3つの宣言が必要である.
繰り返し文でノードを迂回し、値を追加して新しいリストのノードを接続します.この場合、終了条件をよく考慮すると
l 1を見終わるには、l 2を見終わるには、両方が空であっても、前の演算の位置が上昇していれば反映されます.この3つの条件を満たさなければならない.
繰り返し文の条件を満たすと,残りは残りの演算とシェア演算で簡単に解決される.sumにl 1,l 2の値を加算し,残りのノードの新しいノードを得る.nextで作成し、sumはシェア演算値を保存し、node=nodeにします.次の繰り返し文で新しいノードをスムーズに生成するにはnextに移動します.
注意:https://bcp0109.tistory.com/entry/Add-Two-Numbers-Java
Reference
この問題について([Leet code] Add Two Numbers (java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@sebaek42/Leet-code-Add-Two-Numbers-java
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([Leet code] Add Two Numbers (java)), 我々は、より多くの情報をここで見つけました https://velog.io/@sebaek42/Leet-code-Add-Two-Numbers-javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol