leetcode
第二题:两数相加
以链表为载体模仿加法进位,同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个 0 。如果链表遍历结束后,有 carry>0,还需要在答案链表的后面附加一个节点,节点的值为 carry。
易错点:1.每个数字的初始赋值xy,如果短的链表走完了要考虑赋零。
2.result结点是遍历两个链表的结果值,但返回的应该是头结点的下一个结点,用于测试和遍历。
时间复杂度:O(max(m,n)),其中 m和 n 分别为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1)的时间。
空间复杂度:O(1)。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result_head = new ListNode(0);
ListNode result = result_head;
int carry = 0;
while(l1 != null || l2 !=null){
int x = l1 == null ? 0:l1.val;
int y = l2 == null? 0: l2.val;
int sum = x + y +carry;
carry = sum / 10;
ListNode temp = new ListNode(sum % 10);
result.next = temp;
result = result.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry != 0) {
ListNode temp = new ListNode(carry);
result.next = temp;
}
return result_head.next;
}
标签:ListNode,相加,链表,l2,result,l1,carry,leetcode,两数
From: https://www.cnblogs.com/ldy20020324/p/17937454