题设要求:
完整代码:
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); //返回结果的链表头指针
ListNode firstNode=l1; //链表1
ListNode secondNode=l2; //链表2
ListNode curNode=headListNode; //目前操作节点指针
boolean isCarry=false;
while(firstNode!=null || secondNode!=null){
//获取两链表同位节点值
int num1=(firstNode==null)?0:firstNode.val;
int num2=(secondNode==null)?0:secondNode.val;
//计算节点值
int sum;
if(isCarry){
sum=num1+num2+1;
}else{
sum=num1+num2;
}
//是否有进位
isCarry=(sum/10)>0;
//增加新结点
curNode.next=new ListNode(sum%10);
//准备获取下一个节点值
curNode=curNode.next;
//存在链表1已经遍历完成的情况
if(firstNode!=null){
firstNode=firstNode.next;
}
//存在链表2已经遍历完成的情况
if(secondNode!=null){
secondNode=secondNode.next;
}
}
//两条链表节点遍历完成判断最后是否留有进位
if(isCarry){
curNode.next=new ListNode(1);
}
return headListNode.next;
}
}