侧边栏壁纸
博主头像
hanlibaby博主等级

念念不忘,必有回响

  • 累计撰写 59 篇文章
  • 累计创建 92 个标签
  • 累计收到 21 条评论

LeetCode-2. 两数相加

hanlibaby
2021-11-27 / 0 评论 / 0 点赞 / 157 阅读 / 1,090 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-11-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题意

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

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

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

示例

image.png

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

解法

思路很简单,直接模拟一遍即可,由于输入的两个链表都是逆序存储的,所以可以从最低位到最高位逐位相加,如果和大于等于 10,那么只保留个位数字,同时向前进位 1 如果最高位有进位,则需在最前面再补 1

参考代码:
1、Java
/**
 * 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) {
        var dummy = new ListNode(-1);
        ListNode cur = dummy;
        int t = 0;
        while (t != 0 || l1 != null || l2 != null) {
            if (l1 != null) {
                t += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                t += l2.val;
                l2 = l2.next;
            }
            cur = cur.next = new ListNode(t % 10);
            t /= 10;
        }
        return dummy.next;
    }
}
2、Go
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    dummy := &ListNode{Val: -1}
    cur := dummy
    for t := 0; l1 != nil || l2 != nil || t != 0; {
        if l1 != nil {
            t += l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            t += l2.Val
            l2 = l2.Next
        }
        cur.Next = &ListNode{Val: t % 10}
        cur = cur.Next
        t /= 10
    }
    return dummy.Next
}
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(1)$
0

评论区