題設(shè)要求:
完整代碼:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public int l1Length=0;
public int l2Length=0;
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode headListNode=new ListNode(0); //返回結(jié)果的鏈表頭指針
ListNode firstNode=l1; //鏈表1
ListNode secondNode=l2; //鏈表2
ListNode curNode=headListNode; //目前操作節(jié)點指針
boolean isCarry=false;
while(firstNode!=null || secondNode!=null){
//獲取兩鏈表同位節(jié)點值
int num1=(firstNode==null)?0:firstNode.val;
int num2=(secondNode==null)?0:secondNode.val;
//計算節(jié)點值
int sum;
if(isCarry){
sum=num1+num2+1;
}else{
sum=num1+num2;
}
//是否有進位
isCarry=(sum/10)>0;
//增加新結(jié)點
curNode.next=new ListNode(sum%10);
//準備獲取下一個節(jié)點值
curNode=curNode.next;
//存在鏈表1已經(jīng)遍歷完成的情況
if(firstNode!=null){
firstNode=firstNode.next;
}
//存在鏈表2已經(jīng)遍歷完成的情況
if(secondNode!=null){
secondNode=secondNode.next;
}
}
//兩條鏈表節(jié)點遍歷完成判斷最后是否留有進位
if(isCarry){
curNode.next=new ListNode(1);
}
return headListNode.next;
}
}