leetcode 2.两数相加

发布时间 2023-12-31 13:43:50作者: 米乡卷炸粉

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;

    }