2.单链表两数相加(java)
题目描述:
分析:
1.首先创建一个虚拟节点 ListNode dummy = new ListNode(-1);再创建一个节点来保存虚拟节点,因为使用虚拟节点来移动,如果不保存,最后就会丢失。保存虚拟节点:ListNode p=dummy;
2.进位标志:int carry=0;
接收两个单链表:ListNode head1=l1; ListNode head2=l2;
3.用一个新值保存相加结果,新值初始为0:int newVal=0;
4. 循环:当head1不空或者head2不空或carry>1时:
while(head1 !=null || head2 !=null || carray>0)
这里对carry有要求是因为:加到最后一位时需要进位,所以只要carry>1就需要处理
加和:newVal=head1.val+head2.val+carry
节点移动:使用三目运算符:?
非空:节点=节点.next 空:null
5.最后返回头节点:return p.next;
java代码如下:
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode dummy=new ListNode(-1);ListNode p=dummy;ListNode head1=l1;ListNode head2=l2;int carry=0;int newVal=0;while(head1!=null || head2!=null || carry>0){int val1=head1!=null ? head1.val:0;int val2=head2!=null ? head2.val:0;newVal=val1+val2+carry;carry=newVal/10;newVal%=10;dummy.next=new ListNode(newVal);head1=head1!=null ? head1.next: null;head2=head2!=null ? head2.next: null;dummy=dummy.next;}return p.next;}
}