Leetcode 题解 [2.两数之和](Java)

Leetcode 题解(每日打卡)

[2.两数之和]

题目链接

题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

思路

由于两个链表是逆序存储,所要计算得到结果就是

t.val = (l1+l2+j)%10

j = (l1+l2+j)/10

j:进位

t.val:本位

代码实现

/**
 * 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 head = new ListNode();
        ListNode t = head;
        int j = 0;
        while(true){
            if(l1 != null && l2 != null){
                t.val = (l1.val+l2.val + j)%10;
                j = (l1.val+l2.val + j)/10;
                l1 = l1.next;
                l2 = l2.next;
            }else{
                if(l1 != null){
                    t.val = (l1.val + j)%10;
                    j = (l1.val + j)/10;
                    l1 = l1.next;
                }else if(l2 != null){
                    t.val = (l2.val + j)%10;
                    j = (l2.val + j)/10;
                    l2 = l2.next;                    
                }
            }
            if(l1 == null && l2 == null &&j !=0){
                ListNode m = new ListNode();
                t.next = m;
                t = t.next;
                t.val = j;
            }            
            if(l1 == null && l2 == null) break;
            ListNode m = new ListNode();
            t.next = m;
            t = t.next;
        }
        return head;
    }
}

时间复杂度: O(n)

空间复杂度: O(n)

posted @ 2021-10-01 09:52  egospace  阅读(62)  评论(0)    收藏  举报