まず、対象の説明:
我々は2つの非空リストは二つの非負整数を表すために使用されて示されています。ここで、それぞれのビットは、方法の逆の順序で格納され、それらは各ノードが一つだけ桁を格納することができます。
我々はこれらの2つの数値を合計した場合、それは新しいリストを返しますし、それらを表現します。
あなたは数字0に加えて、これらの二つの数字が0で始まっていないと仮定することができます。
例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/add-two-numbers
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
第二に、問題解決のアイデア:
図1は、第一空またはnullの場合、リストL1およびL2は、空であるかどうかを決定します。
2、さらには新しいリストを作成し、ノードの2つの数の新しいリストに配置されます。それが空になるまで、L1リストを横断し、L2は空とキャリーキャリーゼロです。
3、キャリービットキャリーかどうか、異なる鎖長さL1、L2を考慮する必要があります。
第三に、コード説明:
/**
* 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) {
if(l1==null&&l2==null){
return null;
}
//carry表示进位数
int carry=0;
//创建新链表
ListNode newHead=new ListNode(-1);
ListNode newTail=newHead;
while(l1!=null||l2!=null||carry!=0){
if(l1!=null){
carry+=l1.val;
l1=l1.next;
}
if(l2!=null){
carry+=l2.val;
l2=l2.next;
}
//新节点的值为%10后的余数
newTail.next=new ListNode(carry%10);
newTail=newTail.next;
//标志位为/10后的整数
carry/=10;
}
return newHead.next;
}
}