我这道题写的是很拖沓了,不太简洁,有很多可以优化的地方,之后有时间再附上优化的代码。这次做题最让我检查出我学习的不牢固地方就是,我把java的链表和c搞混了,开辟结果链表地址时我写的是
p3=(ListNode)malloc(sizeof(ListNode))
但其实只要创建LsitNode类的对象就可以了。
这道题主要考虑以下几点:
- 两个链表长度相同的时,最后的位置两值相加是否需要进位,需要则在循环体外将1存储在结果链表的最后的位置上。
- 当链表长度不同时,不要忘记短链表结束前最后一位相加后的值可能需要进。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int yushu=0,value=0;
ListNode sum=new ListNode();
ListNode p3=sum;
ListNode p1=l1,p2=l2;
if(p1==null&&p2==null){
p3.val=0;
return p3;
}
while(p1!=null&&p2!=null){
if(p1!=null&&p2!=null){
p3.next=new ListNode();
p3=p3.next;
value =p1.val+p2.val+yushu;
yushu=0;
if(value<10){
p3.val=value;
}else if(value>=10){
yushu=value/10;
p3.val=value%10;
}
p1=p1.next;
p2=p2.next;
// p3=p3.next;
}
}
while(p1==null&&p2!=null){
p3.next=new ListNode();
p3=p3.next;
value=p2.val+yushu;
p3.val=value%10;
yushu=value/10;
p2=p2.next;
}
while(p2==null&&p1!=null){
p3.next=new ListNode();
p3=p3.next;
value=p1.val+yushu;
p3.val=value%10;
yushu=value/10;
p1=p1.next;
}
if(yushu==1){
p3.next=new ListNode(1);
}
return sum.next;
}
}