兩數(shù)相加-leetcode
題目描述
給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。
請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。
你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。
示例 1:

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
提示:
- 每個鏈表中的節(jié)點數(shù)在范圍
[1, 100]內(nèi) 0 <= Node.val <= 9- 題目數(shù)據(jù)保證列表表示的數(shù)字不含前導(dǎo)零
解法一
思路:
一個一個數(shù)相加,把結(jié)果模10作為當前節(jié)點的數(shù),結(jié)果除10作為進值。
/**
* 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 head=new ListNode(0);
ListNode list1=l1,list2=l2;
ListNode cur=head;
int in=0;
boolean flag1=false,flag2=false;
while(!flag1||!flag2){
int ans=list1.val+list2.val+in;
int res=ans%10;
in=ans/10;
ListNode newNode=new ListNode(res);
cur.next=newNode;
cur=cur.next;
list1=list1.next;
list2=list2.next;
if(list1==null){
flag1=true;
list1=new ListNode(0);
}
if(list2==null){
flag2=true;
list2=new ListNode(0);
}
}
if(in!=0){
cur.next=new ListNode(in);
}
return head.next;
}
}

浙公網(wǎng)安備 33010602011771號