题目:
思路:
从左往右做加减法,但是右边是高位
思路简单,注意实现细节
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode cur = new ListNode(0);
ListNode ans = cur;
int flag = 0;
while(l1 != null && l2 != null){
int sum = l1.val + l2.val + flag;
if(sum >= 10){
flag = 1;
}
else{
flag = 0;
}
cur.val = sum % 10;
l1 = l1.next;
l2 = l2.next;
if(l1 != null && l2 != null){
ListNode new_node = new ListNode();
cur.next = new_node;
cur = cur.next;
}
}
while(l1 != null){
int sum = l1.val + flag;
if(sum >= 10){
flag = 1;
}
else{
flag = 0;
}
ListNode new_node = new ListNode();
new_node.val = sum % 10;
cur.next = new_node;
l1 = l1.next;
cur = cur.next;
}
while(l2 != null){
int sum = l2.val + flag;
if(sum >= 10){
flag = 1;
}
else{
flag = 0;
}
ListNode new_node = new ListNode();
new_node.val = sum % 10;
cur.next = new_node;
l2 = l2.next;
cur = cur.next;
}
if(flag == 1){
ListNode new_node = new ListNode(1);
cur.next = new_node;
}
return ans;
}
}
复杂度分析:
时间复杂度: O( max( m,n ) )
空间复杂度: O(1)