题目分析
两个链表进行同时遍历的时候,要注意在遍历的过程中都不能为空,否则会出错,当一个链表遍历完成的时候,另一个可能没有遍历完成,要继续遍历。
在生成结果链表的时候,最好使用一个哑结点当作头,这样可以省去复杂的条件判断。
在进行加法操作的时候注意进位。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyNode = new ListNode(-1);
ListNode dHead = dummyNode;
ListNode head1 = l1;
ListNode head2 = l2;
int carry = 0;
while(head1!=null&&head2!=null){
int num = head1.val+head2.val+carry;
if(num>=10){
carry = 1;
num%=10;
}
else{
carry = 0;
}
dHead.next = new ListNode(num);
dHead = dHead.next;
head1=head1.next;
head2=head2.next;
}
ListNode notNull = (head1==null?head2:head1);
if(notNull!=null){
while(notNull!=null){
int num = notNull.val+carry;
if(num>=10){
num%=10;
carry = 1;
}
else{
carry = 0;
}
dHead.next = new ListNode(num);
dHead = dHead.next;
notNull = notNull.next;
}
}
if(carry==1){
dHead.next = new ListNode(1);
dHead = dHead.next;
}
return dummyNode.next;
}
}